我想使用一个模板类来为一些非常相似的子类提供一些通用功能。唯一的变化是每个使用的枚举。这是父类templateclassE_EnumerationBase:publicSimpleElement{public:E_EnumerationBase();virtualboolsetValue(QStringchoice);virtualTgetState();protected:Tstate;QHashdictionary;};templateE_EnumerationBase::E_EnumerationBase(){state=0;}templateboolE_EnumerationB
为了使我的代码更短更容易更改,我想替换类似的东西enum{E_AAA,E_BBB,E_CCC};staticconstchar*strings{"AAA","BBB","CCC"};使用宏,例如INIT(AAA,BBB,CCC);但是当我尝试使用可变参数和字符串化做一个宏时,我得到一个错误,因为没有声明参数。你知道怎么做吗? 最佳答案 这是我几天前学到的解决方案。处理您的问题的简化版是:#defineENUM_MACRO(name,v1,v2,v3,v4,v5,v6,v7)\enumname{v1,v2,v3,v4,v5,v6,v7
为了使我的代码更短更容易更改,我想替换类似的东西enum{E_AAA,E_BBB,E_CCC};staticconstchar*strings{"AAA","BBB","CCC"};使用宏,例如INIT(AAA,BBB,CCC);但是当我尝试使用可变参数和字符串化做一个宏时,我得到一个错误,因为没有声明参数。你知道怎么做吗? 最佳答案 这是我几天前学到的解决方案。处理您的问题的简化版是:#defineENUM_MACRO(name,v1,v2,v3,v4,v5,v6,v7)\enumname{v1,v2,v3,v4,v5,v6,v7
structBar{enum{Special=4};};templatestructFoo{};templatestructFoo{};用法:Fooaa;使用gcc4.1.2编译失败它提示使用T::Special来对Foo进行部分特化。如果Special是一个类,则解决方案将是它前面的类型名。枚举(或整数)是否有与之等效的东西? 最佳答案 因为C++不允许explained由Prasoon提供,因此另一种解决方案是使用EnumToType类模板,structBar{enum{Special=4};};templatestructEn
structBar{enum{Special=4};};templatestructFoo{};templatestructFoo{};用法:Fooaa;使用gcc4.1.2编译失败它提示使用T::Special来对Foo进行部分特化。如果Special是一个类,则解决方案将是它前面的类型名。枚举(或整数)是否有与之等效的东西? 最佳答案 因为C++不允许explained由Prasoon提供,因此另一种解决方案是使用EnumToType类模板,structBar{enum{Special=4};};templatestructEn
这样做有没有意义:namespacestatus{enumstatus{ok,error};}并像那样使用它status::ok或者我应该这样做:enumstatus{status_ok,status_error};并像这样使用它status_ok?更新:使用C++11,您现在应该这样做:enumclassstatus{ok,error};并像这样使用:status::ok 最佳答案 我个人不喜欢第二种变体,因为status_部分对我来说似乎是多余的。以前的版本避免了这个问题,但是有一个类型status::status看起来也很奇怪
这样做有没有意义:namespacestatus{enumstatus{ok,error};}并像那样使用它status::ok或者我应该这样做:enumstatus{status_ok,status_error};并像这样使用它status_ok?更新:使用C++11,您现在应该这样做:enumclassstatus{ok,error};并像这样使用:status::ok 最佳答案 我个人不喜欢第二种变体,因为status_部分对我来说似乎是多余的。以前的版本避免了这个问题,但是有一个类型status::status看起来也很奇怪
例如在C/C++中,我会得到以下代码:typedefenumfruits{apple,banana,lemon,orange}fruit_t;相当于:typedefenumfruits{apple=0,banana=1,lemon=2,orange=3}fruit_t;但是,我希望这些值是负数,这样它们就不会与其他任何东西发生冲突。我可以这样做:typedefenumfruits{apple=-1,banana=-2,lemon=-3,orange=-4}fruit_t;但是如果我想添加另一个水果,我必须分配另一个值,如果我在中间放一个,我必须重新编号它的大部分。有没有更简单的方法?
例如在C/C++中,我会得到以下代码:typedefenumfruits{apple,banana,lemon,orange}fruit_t;相当于:typedefenumfruits{apple=0,banana=1,lemon=2,orange=3}fruit_t;但是,我希望这些值是负数,这样它们就不会与其他任何东西发生冲突。我可以这样做:typedefenumfruits{apple=-1,banana=-2,lemon=-3,orange=-4}fruit_t;但是如果我想添加另一个水果,我必须分配另一个值,如果我在中间放一个,我必须重新编号它的大部分。有没有更简单的方法?
出于好奇,我正在试验这个:enumRxqType{A=(1枚举器C和D是根据早期的枚举器定义的。这是不寻常的,所以我不确定它是否安全。我无法通过Google找到有关它的示例(尽管可能会忽略)。当我在VisualC++2013和MinGW上printf或coutC和D似乎没问题.但我担心它是否符合标准,以及它是否会触发未定义的行为。谁能回答我对标准一致性和未定义行为的担忧?还有什么我需要担心的吗? 最佳答案 enumRxqType{A=(1在C和C++中这是有效的。对于C:(C11,6.2.1p7)"Eachenumerationco