2016-11-11 12 views
5

c++11コードでは、enum値を使用するたびに特定のenum修飾子に言及しないようにしてください。新しいコードで多くのリファクタリングが行われます。 C++11enum型のハードコーディングを避ける

enum abc { a,b,c }; 
// some long code of events which returns the enum's value 
auto e = []()->abc{return abc::b;}(); 
if (e == std::declval(e)::a) { ... 

ことができないならば、それはC++14または17で可能になります。そのために

が、それは、この擬似コードの最後の行の精神で何か可能ですか?

+1

あなたはそれが '列挙class'でない限りenumの名前を使用する必要はありません。単純に 'if(e == a)'を使用することができます –

+0

'class'が見つからないことがバグであることが判明しました。 –

答えて

8

あなたが近くにいる、あなたはdecltypeを使用することができます。

if (e == decltype(e)::a) { 
    ... 
+0

私はここで何が欠けているのですか?この場合、@ CaptainGiraffeは –

+0

です。しかし、enumがネームスペースで宣言されている場合、またはクラスメンバーである場合、またはenumクラスである場合、それは中断されます。 – krzaq

+0

ああ、もちろん。ありがとう。 –

関連する問題