我正在尝试编写一个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 ...
...
但宏定义似乎没有正常工作。它应该如何按照我的意图运作?
答案 0 :(得分:3)
使用
#define DECLARE_SET_ELEMENT(color) class color##SetElement : public SetElement { public: color##SetElement(std::string name); int getValue() override; };
代替。在这种情况下,前导##
不适合。您不希望将class
关键字与color
结合使用。