在C ++中遇到宏问题

时间:2016-12-31 21:43:55

标签: c++ class macros

我正在尝试编写一个C ++宏来使用模板和颜色名称定义一堆子类,如下所示:

#define DECLARE_SET_ELEMENT(color) class ##color##SetElement : public SetElement { public: ##color##SetElement(std::string name); int getValue() override; };

以便我可以像:

一样使用它
DECLARE_SET_ELEMENT(Blue) // -> class BlueSetElement ...
DECLARE_SET_ELEMENT(Red)  // -> class RedSetElement ...
...

但宏定义似乎没有正常工作。它应该如何按照我的意图运作?

1 个答案:

答案 0 :(得分:3)

使用

#define DECLARE_SET_ELEMENT(color) class color##SetElement : public SetElement { public: color##SetElement(std::string name); int getValue() override; };

代替。在这种情况下,前导##不适合。您不希望将class关键字与color结合使用。