我正在定义一个宏,我在其中将一个标记作为参数,并将其附加到前缀,如下所示:
Enum::Type var = FULL_NAME(enum1);
哪个应转换为:
Enum::Type var = Enum::Type::enum1;
我读过你可以使用##运算符来连接两个参数,如:
#define glue(a, b) (a ## b)
但我可以像
一样使用它#define FULL_NAME(name) (Enum::Type ## name)
如果没有,那么正确的做法是什么?
答案 0 :(得分:0)
不,##
用于创建令牌。你不需要它,它将无法工作。
你想要的更简单:
#define FULL_NAME(name) (Enum::Type::name)
虽然您可能会将Enum::Type::enum1
视为单个名称,但它实际上是五个令牌。你可以用令牌之间的空白甚至评论来写它,虽然除了作为一个学习练习之外我不会推荐它:
Enum ::/* the outer namespace */
Type // the inner namespace
:: enum1