草庐IT

c++ - 将枚举用作 int 是一种好习惯吗?

所以,我在一个类中有一个变量“state”。我想将它声明为一个整数,这样我就可以保存一些if语句。intstate;一种方法是声明一个枚举状态{One=0,Two=1,Three=3},然后在switch语句中,它将变为:switch(state){caseOne:dosomething();break;caseTwo:dosomething();break;caseThree:dosomething();break;}那么,像这样使用枚举是一种好习惯吗?有更好的方法吗?谢谢! 最佳答案 是的,这是一个很好的方法。您通常使用enum

c++ - 我如何在 C++ 中使用 'ToString()' 枚举?

这个问题在这里已经有了答案:Howtoeasilymapc++enumstostrings(23个回答)关闭7年前。如何在C++中“ToString()”一个枚举?在Java和C#中,我只调用ToString。enumColours{Red=0,Green=1,Blue=2};我需要创建一个字符串,例如:“Invalidcolor'”+color+“'selected。”

c++ - 验证整数是某个枚举类项 (C++11)

我有一些枚举类enumclassFoo{A=1,B=18,Z=42};我想检查一些整数是否可以转换为Foo。这样做的理想方法是什么?这是用于运行时检查(整数在编译时未知)显然我可以用困难的方式来做到这一点(写一个函数boolCheckEnum(Foo);带有一个大屁股的开关,除了默认情况外,所有情况都返回true),但我希望有一个更优雅的机制,避免了太多的写作。MPL或Boost.Preprocessor将是一个完全可以接受的解决方案,但遗憾的是我对其中之一知之甚少 最佳答案 这个问题的解决方案是放弃枚举,并将其替换为一些使用XMA

c++ - 如何使用 Doxygen 记录具有相同名称的枚举值?

我正在尝试用Doxygen记录两个包含一些相似值的类枚举。但这会为每个具有相同名称的字段生成重复文本。这是我的两个枚举:/*!*\enumOperandType*\briefAtypeofoperand.Representsthelocationoftheoperand.*/enumclassOperandType:unsignedint{IMMEDIATE,/**每个枚举的STACK成员的描述是两个描述的串联,并且GLOBAL存在相同的问题。堆栈的描述是:AvariableonthestackAnoperandonthestack有没有办法专门记录它们中的每一个?

c++ - 空的 variardic 枚举包——它们是否使两个函数不同?

我有时会在覆盖template时使用一种技巧函数是这样的:#includetemplatestructunique_enum{enumclasstype{};};templateusingUniqueEnum=typenameunique_enum::type;templateusingEnableFuncIf=typenamestd::enable_if>::type;templateusingDisableFuncIf=EnableFuncIf;//boringtraitsclass:templatestructis_int:std::false_type{};templatest

c++ - 为什么 boost::call_traits<T>::param_type 是枚举类型的引用?

基本的C++03枚举类型只是一个具有奇特名称的整数值,因此我希望按值传递它....出于这个原因,我还期望boost::call_traits::param_type与T=SomeEnum确定最有效的传球方式T是按值(value)。从boost文档中查看CallTraits:Definesatypethatrepresentsthe"best"waytopassaparameteroftypeTtoafunction.当我使用boost::call_traits::param_type时与T=SomeEnum它确定SomeEnum应该通过引用传递。我也期待C++11classenums也

c++ - 前向声明类模板的成员枚举

使用C++11的强类型enum,可以像这样声明一个类的成员枚举:classX{public:enumclassE;};enumclassX::E{a,b};但是,当使X成为类模板时:templateclassX{public:enumclassE;};templateenumclassX::E{a,b};gcc4.7.2和clang3.0都分别提示“错误:‘enumX::E’是枚举模板[-pedantic]”和“错误:枚举不能是模板”。我认为相关的标准部分(事实上,这个问题源于此)是§14模板,其中第一段指出:Thedeclarationinatemplate-declarations

c++ - 我应该如何循环 C++11 中的枚举类?

我应该如何在C++11中循环枚举类?我希望我仍然不必添加END的最终枚举值,但我也无法使基于范围的循环工作。 最佳答案 如果你真的需要遍历枚举类并且你想避免添加特殊的END符号,你可以为此目的定义你自己的特征。templatestructEnumTraits;enumclassE{V1,V2,V3};enumclassF{X1,X2,X3};templatestructEnumTraits{staticconstexprELAST=E::V3;};templatestructEnumTraits{staticconstexprFLA

c++ - 如何从枚举模板参数推断数组大小?

我应该如何更改下面的代码,以便Arrayarray;就足够了SIZE是从枚举中自动推导出来的?即使枚举发生变化,也保证它包含SIZE指的是正确的尺寸。templateclassArray{public:int&operator[](Enumindex){returnarray[index];}private:intarray[N];};enumIndex{X,Y,SIZE};intmain(){Arrayarray;array[X]=1;return0;}更新:至于“Array意味着您正在创建一个Type对象数组”(Jerry)和“类模板的名称有点误导”(Nawaz):实际上我正在创建

c++ - g++ C++0x 枚举类编译器警告

我一直在将C++类型安全伪枚举的可怕困惑重构为新的C++0x类型安全枚举,因为它们方式更具可读性。无论如何,我在导出类中使用它们,所以我明确标记它们要导出:enumclass__attribute__((visibility("default")))MyEnum:unsignedint{One=1,Two=2};用g++编译它会产生以下警告:typeattributesignoredaftertypeisalreadydefined这看起来很奇怪,因为据我所知,该警告旨在防止实际错误,例如:class__attribute__((visibility("default")))MyCla