我知道可以编写一个“寄存器”宏,将它们的值映射到它们的字符串表示形式。然而,C++11中是否有一些新的魔力使得无需宏和任何注册样板成为可能?为了说清楚,我希望能够打印枚举变量的标识符,例如:enumDays{Sunday,Monday,Tuesday};autod=Days::Sunday;std::cout应该输出Days::Sunday 最佳答案 不,这真的不可能。您需要宏(最好)或扩展编译器以获得更多技巧(您可以使用插件或MELT扩展GCC以提供特殊的_my_enum_name_builtin函数,但我认为这不是一个好方法主意
我在C++11中工作,包括一个在C++03中实现的h文件。在我包含的h文件中,定义了一个枚举Foo。我想在code.h中声明一个转发到它并在code.cpp中使用它:标题.h:enumFoo{A=1};代码.h:enumFoo:int;//alsotried:unsignedint,long,short,unsignedshort,char,unsignedcharvoidbar(Foofoo);代码.cpp:#includeheader.hvoidbar(Foofoo){}这是我在编译时遇到的错误(测试了g++4.8.5和g++5.3.1):Infileincludedfromcod
我在某个.h文件中声明了一个枚举:typedefenum{NONE,ONE,TWO,THREE}MYENUM;在单独的.cpp中我不能这样做:externenumMYENUM;//worksexternMYENUMTWO;//makessence,TWOisnotanINSTANCEofMYENUM...如果不包括声明枚举的整个header,如何做到这一点? 最佳答案 您不能使用不完整的类型。您只能传递指向它的指针。这是因为在类型完成之前,编译器不知道它有多大。OTOH指针是数据指针的大小,无论它指向什么类型。对于不完整的类型,您不
有没有办法重载转换运算符以在两个枚举之间进行转换?在我的代码中有enumdevStatus{NOT_OPERATING,INITIALISING,DEGRADED,NORMAL};enumdataStatus{UNAVAILABLE=1,DEGRADED,NORMAL}其中NOT_OPERATING和INITIALISING映射到UNAVAILABLE;DEGRADED和NORMALmap直接穿过。这些由外部接口(interface)固定。我正在寻找一种在devStatus和dataStatus之间进行转换的方法,并且希望能够编写如下内容:devStatusdevSts;getDevi
我正在尝试实现一个enum类,它的行为类似于C++11中引入的类(具有类型安全等),但它的行为也像一个真实的类(带有构造函数、方法等)。为了这样做,我保持内部enum匿名:这有副作用,为了保持m_value作为private成员变量,我必须添加一个名为_的static成员变量,如下所示:#include#includeclassState{public:staticenum{UNKNOWN,STARTED,STOPPED}_;private:usingType=decltype(_);Typem_value;public:constexprState(Typevalue=UNKNOWN
#includeenumclassMyEnum{Hello};templateclassMyClass{public:MyClass(Tobj):e(obj){}private:Te;};templateclassMyClass::value&&std::is_same::type,int>::value>::type>{public:MyClass(Tobj):e(obj){}private:Te;};intmain(){MyClassc(MyEnum::Hello);MyClassc1(1);//doesnotcompileduetostd::underlying_typeretu
我想检查类中的变量是否已设置?我该怎么做?enumColor{red,blue};classexample{Colorc;voidset_color(Colorc){this->c=c;}Colorget_color(){returnc;}boolcheck_color_is_set(){if(c==Color){}//compileerrorif(c==NULL){}//compileerrorreturntrue;}我想知道变量Colorc是否被赋值了? 最佳答案 除了为未分配值(如@code707'sanswer)之外,您还可
在我使用的外部代码中有枚举:enumEn{VALUE_A,VALUE_B,VALUE_C};在我使用的另一个外部代码中有3个#define指令:#defineValA5#defineValB6#defineValC7很多时候我有等于ValA或ValB或ValC的intX,我必须将它转换为En的相应值(ValA到VALUE_A,ValB到VALUEB,等等),因为某些函数签名具有枚举En。而很多时候我不得不做相反的操作,将enumEn翻译成ValA或ValB或ValC。我无法更改这些函数的签名,而且有很多这样的函数。问题是:翻译怎么做?我应该创建2个将被隐式使用的转换运算符吗?或者我应该
classTest{enum{};...};这个空的枚举定义是可移植的吗?在gcc和msvc中编译。 最佳答案 这样的枚举在C++标准的第7条第3段中明确列为病态的。gcc不接受它。在gcc中有一个错误修复:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29018 关于c++-空枚举(enum{};)是可移植的吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我面临着C#中的Enum的问题。我有enum具有相同ID但描述不同的数据。publicenumFlags{[Description("FlagYes")]FlagYes=1,[Description("FlagNo")]FlagNo=1,[Description("ItemYes")]ItemYes=2,[Description("ItemNo")]ItemNo=2,}Flagsflag=Flags.FlagYes;stringDescription=flag.Description();我进去了Description价值“标志否”,但我需要“标志是”。有什么帮助我如何解决这个问题?我使用以下