该__COUNTER__符号由VC++和GCC提供,并在每次使用时提供增加的非负积分值.
我有兴趣了解是否有人曾经使用它,以及它是否值得标准化?
是否有编译时方法来检测/防止C/C++枚举中的重复值?
问题在于有多个项目被初始化为显式值.
背景:
我继承了一些C代码,如下所示:
#define BASE1_VAL (5)
#define BASE2_VAL (7)
typedef enum
{
MsgFoo1A = BASE1_VAL, // 5
MsgFoo1B, // 6
MsgFoo1C, // 7
MsgFoo1D, // 8
MsgFoo1E, // 9
MsgFoo2A = BASE2_VAL, // Uh oh! 7 again...
MsgFoo2B // Uh oh! 8 again...
} FOO;
Run Code Online (Sandbox Code Playgroud)
问题是随着代码的增长和开发人员向MsgFoo1x组中添加更多消息,最终它会超出BASE2_VAL.
这段代码最终会迁移到C++,所以如果只有一个C++解决方案(模板魔术?),那没关系 - 但是使用C和C++的解决方案更好.
由于我的设备,我无法使用虚拟功能.假设我有:
class Base
{
void doSomething() { }
};
class Derived : public Base
{
void doSomething() { }
};
// in any place
{
Base *obj = new Derived;
obj->doSomething();
}
Run Code Online (Sandbox Code Playgroud)
在obj->doSomething()将调用只是Base::doSomething()
有没有一种方法Base *obj,来调用doSomething的Derived?
我知道我可以只是把virtual之前doSomething()的Base它解决的问题,但我通过我的设备的限制,编译器不支持它.
假设我有这样的事情:
enum CardColor { HEARTS, DIAMONDS, CLUBS, SPADES};
CardColor MyColor = static_cast<CardColor>(100);
Run Code Online (Sandbox Code Playgroud)
是否有(简单)方法在编译时或运行时检测到值MyColor与任何枚举值不对应?
更一般地说,如果枚举值不相互跟随,例如:
enum CardColor { HEARTS = 0, DIAMONDS, CLUBS = 4, SPADES};
Run Code Online (Sandbox Code Playgroud)