問題が痛いほどよく聞こえます。 は、あなたが列挙型を持っていると仮定しますC++での組み込み型の列挙型への自動変換
enum MyEnum {first, second, third};
は今、私はMyEnumに、いくつかのint型に変換します。ナイーブアプローチ
int i = 2;
MyEnum e = (MyEnum)i;
そうだとは限りません。まず、2は「第3」に変換され、第2には変換されません。第二に、この変換はダムであり、私はスマートなものを望んでいます。次のように 動機は次のとおりです。
void foo(MyEnum e) { ... }
...
foo(2);
そして、それのfoo()は常に関係なく、この列挙型の実際の値が何であるか2のための「第2」受け取るべきではありません。 2つの明白な解決策があります。
- 書き込み変換機能と常には
- 過負荷キャスト演算子
第一ソリューション、それを呼び出すには、明らかにひどいです。書き込みをしたくありませんfoo(convetIntToMyEnum(2));
私はfoo(2)を書きます。コンパイラは自動的に変換関数を呼び出します。だから二番目の解決策は私が必要なものです。 'int'が自分のクラスだった場合、キャスト演算子のオーバーロードは簡単です。しかし、int型はintrinsic型です。
私は漠然とその可能性を覚えていますが、それを見つけることはできません。私の金髪の瞬間の治療を感謝します。
「enum MyEnum {first = 1、second、third}}」を実行します。問題が解決しました。 – cdhowie
いいえ、私はそれを望んでいません。具体的には、enumは{first = 0x1000、second = 0x2000 ...}とすることができます。ヒント:enumはHWの設定を表していますので、enum項目の値を自由に選択することはできません。 – Noname
なぜ、0x1000にマッピングされるのでしょうか?それはちょっとばかげている。あなた自身のコードを難読化するというこの奇妙な欲求を本当に追求したいなら、enumの代わりにクラスを使うことを検討してください。またはルックアップテーブル。あるいは、数値を他の数字に変える暗黙的な変換以外の文字通りのもの。 – cdhowie