我正在尝试编写一个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 ...
...
但是宏定义似乎无法正常工作。为了使它按我的预期工作应该如何?
最佳答案
使用
#define DECLARE_SET_ELEMENT(color) class color##SetElement : public SetElement { public: color##SetElement(std::string name); int getValue() override; };
代替。前导
##
在这种情况下不适合。您不想将class
关键字与color
结合使用。