看来这个问题在我们的工作中很常见。我们通过网络发送一个int或enum值,然后我们收到它,我们想创建/调用一个特定的对象/函数。最简单的解决方案是使用switch语句,如下所示:switch(value){caseFANCY_TYPE_VALUE:returnnewFancyType();}它工作正常,但我们会有很多这样的开关block,当我们创建新的值和类型时,我们需要更改所有这些。这似乎是对的。其他可能性是使用模板。但我们不能,因为枚举的值是在运行时定义的。是否有任何正确的设计模式或任何正确的方法?这似乎是每天编码中一个非常普遍和普遍的问题......
这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:ExtendingenumsinC++?我正在使用一个将自己的错误集定义为枚举类型的库。enumerror_type{...}该库还有一个函数,它采用该枚举类型并打印错误。voidset_status(error_typenew_error)如果我想定义自己的错误,并将其提供给set_status函数,是否可以以某种方式扩展error_type枚举,或者覆盖它?
在只使用Python太久之后,我正在努力重新熟悉C++。我用MSVisualC++2010Express版编写了一个小程序,我到处寻找编译器似乎不喜欢我使用枚举类Choice的罪魁祸首。编译器提示不存在具有此名称的命名空间。现在,我应该说我以前编写的所有C/C++代码都是在学术环境中编写的,因此我使用的是完整的IDE。不管怎样,我在下面附加了代码,如果这是错误的发布方法,请原谅我。如果是,请向我推荐正确的方法,以后我会使用它。提前感谢您提供任何帮助或见解,任何人都可以提供帮助。代码如下:#include"stdafx.h"#include#include#includeusingnam
所以我正在使用C++编写一个游戏,在我的教程状态下,我有不同的步骤供用户执行,以解释游戏的工作原理。我想在执行某个操作后增加用户所在的步骤。(鼠标点击)。我尝试重载++运算符,但我收到一条错误消息:binary'++':'STEPS'doesnotdefinethisoperatororaconversiontoatypeacceptabletothepredefinedoperator。我正在使用visualstudio,它的错误代码为C2676。我的枚举类设置如下:enumclassSTEPS{ONE,TWO,END_OF_LIST};STEPS&operator++(STEPS&
当比较来自不同来源的枚举时,例如以下代码的枚举,GCC会发出警告。有没有办法在没有c风格转换的情况下避免这些警告?structEnumerator{enum{VALUE=5};};templatestructTemplatedEnumerator{enum{VALUE=V};};if(Enumerator::VALUE==TemplatedEnumerator::VALUE){...}并且GCC发出以下类型的警告:GCC:warning:comparisonbetween'enum...'and'enum...' 最佳答案 我相信您
这个问题在这里已经有了答案:WhydoyouusetypedefwhendeclaringanenuminC++?(9个回答)关闭9年前。在头文件中看到了如下内容typedefenumTest__tag{foo,bar}Test;我想知道为什么要使用typedef;我可以用enumTest{foo,bar};是这样吗?
我一直在查看开源项目的一些代码,并注意到在不止一次的情况下,枚举的值是通过将一个值移位一个递增的位置来分配的。我看不到这样做的任何具体原因,也看不出通过仅递增+1来提高分配值的效率。尽管如此,如果没有一些代码来证明让我感到困惑的地方,这可能毫无意义。1级enumEventType{NONE=0,PUSH=12级enumEventType{EVENT_MOUSE_DOUBLE_CLICK=osgGA::GUIEventAdapter::DOUBLECLICK,EVENT_MOUSE_DRAG=osgGA::GUIEventAdapter::DRAG,EVENT_KEY_DOWN=osgG
直接在命名空间级别使用C++中的枚举是一种不好的做法吗?我的意思是不与任何类(class)相关联?假设我有一个枚举和一个看起来像这样的类,enumPlayer{USER,COMPUTER}classGame{//Logicofthegame.};那么我应该将Player枚举声明为游戏类的成员吗?它应该是私有(private)的吗? 最佳答案 使用C++11这个答案最初写于2011年。现在C++11支持广泛可用,首选方法是使用enumclass,正如MatthewD.Scholefield在下面指出的那样:enumclassPlaye
在我声明之后enumcolor{red,blue,green};有什么区别吗colora=blue;和enumcolora=blue; 最佳答案 enumMyEnumType{ALPHA,BETA,GAMMA};enumMyEnumTypex;/*legalinbothCandC++*/MyEnumTypey;//legalonlyinC++enum{HOMER,MARGE,BART,LISA,MAGGIE}; 关于C++枚举语法,我们在StackOverflow上找到一个类似的问题:
我的一般规则是对原始类型按值传递,对对象按引用传递(如果需要,显然是常量)。但是,我不确定枚举类型采用什么方法。我认为按值(value)传递是首选,因为它们看起来很小,但我想听听其他人的想法。 最佳答案 没有别的想法。枚举只是化装(或西装,如果你愿意的话)中的一个整体值。它没有内部结构,只要有机会就会在寄存器中移动。如果您按值传递一个int,那么也可以通过这种方式传递一个枚举。 关于c++-按值或引用传递枚举?,我们在StackOverflow上找到一个类似的问题: