2016-11-11 7 views
5

c++11 코드에서 열거 형 값을 사용할 때마다 특정 열거 형 한정자를 언급하는 것을 피하는 것이 좋습니다. 이는 새 코드이고 많은 리팩토링이 필요하기 때문입니다. C++14 또는 17이 가능하게됩니다 C++11에서열거 형 열거 형을 피하십시오.

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) { ... 

수없는 경우 : 그 목적

가 가능한이 의사 코드의 마지막 줄의 정신에 뭔가있다?

+1

당신은 열거의 이름을 사용할 필요가 없습니다. 간단히'if (e == a)'를 사용할 수 있습니다. –

+0

누락 된'class'가 버그로 밝혀졌습니다. –

답변

8

당신이 가까이있어, 당신은 decltype을 사용할 수 있습니다 : 그것은`열거 class`를 않는 한

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

내가 여기서 무엇을 놓치고 있는지, 왜 그냥 'a'작업을하지 않았는가? 이 경우에는 @CaptainGiraffe가 –

+0

입니다. 그러나 enum이 네임 스페이스에서 선언되거나 클래스 멤버이거나 enum 클래스 인 경우에는 열거됩니다. – krzaq

+0

아 물론. 감사. –

관련 문제