【问题标题】:Macro expansion in C++C++ 中的宏扩展
【发布时间】:2009-03-23 09:03:00
【问题描述】:

如何定义参数位于行首的宏(或解决方法)?

#define SINGLETON_IMPLEMENTATION(className) \
    ##className* ##className::instance_ = NULL;

这会发出编译器警告 (GCC 3.2.3):“'##' 不能出现在宏扩展的任一端”

【问题讨论】:

  • 只有在整个网络上我才能找到关于这个大声笑的任何信息。

标签: c++ macros


【解决方案1】:

您只需要## 将参数附加到另一个字符串。您的宏可以重铸为

#define SINGLETON_IMPLEMENTATION(className) \
    className* className::instance_ = NULL;

【讨论】:

  • 啊当然 - 相当尴尬......这让我发疯了!
【解决方案2】:

## 是连接运算符;编译器只是在抱怨这一点。
你不能在没有之前的东西的情况下连接一个标记,即在宏扩展的开头;只需尝试删除第二行开头的##
另外第二个## 似乎是错误的。如果您只想初始化一个单例指针,请从您的宏中删除两个 ##s。

【讨论】:

    猜你喜欢
    • 2014-09-13
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多