当前位置:  开发笔记 > 编程语言 > 正文

C++中的宏扩展

如何解决《C++中的宏扩展》经验,为你挑选了2个好方法。

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

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

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



1> Jon Bright..:

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

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



2> Paolo Tedesc..:

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

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有