相关疑难解决方法(0)

有没有人曾经使用__COUNTER__预处理器宏?

__COUNTER__符号由VC++和GCC提供,并在每次使用时提供增加的非负积分值.

我有兴趣了解是否有人曾经使用它,以及它是否值得标准化?

c c++

46
推荐指数
5
解决办法
3万
查看次数

C/C++枚举:检测多个项目映射到相同值的时间

是否有编译时方法来检测/防止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++的解决方案更好.

c c++ enums

22
推荐指数
2
解决办法
8906
查看次数

我可以在不使用虚函数的情况下获得多态行为吗?

由于我的设备,我无法使用虚拟功能.假设我有:

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,来调用doSomethingDerived

我知道我可以只是把virtual之前doSomething()Base它解决的问题,但我通过我的设备的限制,编译器不支持它.

c++ polymorphism virtual overriding function

18
推荐指数
4
解决办法
6944
查看次数

检测是否将int转换为枚举结果为非枚举值

假设我有这样的事情:

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)

c++ enums

12
推荐指数
3
解决办法
1万
查看次数

标签 统计

c++ ×4

c ×2

enums ×2

function ×1

overriding ×1

polymorphism ×1

virtual ×1