【问题标题】:Concatenating an argument with a predefined token将参数与预定义的标记连接起来
【发布时间】:2017-03-13 00:03:42
【问题描述】:

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

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)

?

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

【问题讨论】:

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


    【解决方案1】:

    不,## 用于创建令牌。你不需要那个,它也行不通。

    你想要的更简单:

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

    虽然您可能将Enum::Type::enum1 视为一个名称,但它实际上是五个标记。您可以在标记之间使用空格甚至 cmets 来编写它,但除了作为学习练习之外,我不建议这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-02
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多