問題聽起來令人痛苦熟悉。 假設你有枚舉:在C++中自動將內在類型轉換爲enum
enum MyEnum {first, second, third};
現在我想一些INT轉換爲MyEnum。天真的做法
int i = 2;
MyEnum e = (MyEnum)i;
看起來好,但事實並非如此。首先,2將被轉換爲「第三」,而不是人們所期望的「第二」。其次,這種轉換是愚蠢的,我想要一個聰明的。 動機如下:
void foo(MyEnum e) { ... }
...
foo(2);
這FOO()應該總是收到「第二個」 2不管這是什麼枚舉的實際值。 有2個明顯的解決方案:
- 寫轉換功能,並始終調用它
- 超載鑄造操作
1解決方案顯然是可怕的。不想寫foo(convetIntToMyEnum(2));
我想寫foo(2),編譯器會自動調用我的轉換函數。所以第二個解決方案就是我需要的。如果'int'是我自己的類,那麼重載cast操作符是微不足道的。但'int'是內在類型。
我依稀記得有這種可能性,但找不到它。感謝我金髮時刻的治療。
只要'enum MyEnum {first = 1,second,third};'。問題解決了。 – cdhowie
不,我不想那樣。特別是enum可以是{first = 0x1000,second = 0x2000 ...}。提示:枚舉代表硬件的一些配置,所以我沒有真正自由選擇枚舉項的值 – Noname
那麼爲什麼heck會映射到0x1000?這有點荒謬。如果你真的想追求這種混淆你自己的代碼的奇怪願望,可以考慮使用類而不是枚舉。或查找表。或*字面上任何*除了隱式轉換,將數字轉換爲其他數字。 – cdhowie