C++中的宏扩展

LK.*_*LK. 2 c++ macros

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

#define SINGLETON_IMPLEMENTATION(className) \
    ##className* ##className::instance_ = NULL;
Run Code Online (Sandbox Code Playgroud)

这给出了编译器警告(GCC 3.2.3):"'##'不能出现在宏扩展的任何一端"

Jon*_*ght 12

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

#define SINGLETON_IMPLEMENTATION(className) \
    className* className::instance_ = NULL;
Run Code Online (Sandbox Code Playgroud)


Pao*_*sco 6

##是连接运算符; 编译器只是抱怨这一点.
你不能在没有任何东西之前连接一个令牌,即在宏扩展开始时; 只是尝试删除##第二行的开头.
第二个##似乎也错了.如果您只想初始化单例指针,请##从宏中删除两个s.