我正在尝试编写一个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结合使用。

10-04 18:34