将参数与预定义标记连接

时间:2016-10-30 20:11:59

标签: c++ arguments concatenation c-preprocessor preprocessor-directive

我正在定义一个宏,我在其中将一个标记作为参数,并将其附加到前缀,如下所示:

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)

如果没有,那么正确的做法是什么?

1 个答案:

答案 0 :(得分:0)

不,##用于创建令牌。你不需要它,它将无法工作。

你想要的更简单:

#define FULL_NAME(name) (Enum::Type::name)

虽然您可能会将Enum::Type::enum1视为单个名称,但它实际上是五个令牌。你可以用令牌之间的空白甚至评论来写它,虽然除了作为一个学习练习之外我不会推荐它:

 Enum   ::/* the outer namespace */
    Type  // the inner namespace
        :: enum1