Stringize __VA_ARGS__ (C++ variadic macros)
Stringize __VA_ARGS__ (C++ variadic macros)
class Item{
public:
Item(int id,const char *name,const char *props=NULL);
};
我想写:
ITEM(1,FIRST);
ITEM(2,SECOND, WithSomeProps);
带有宏
#define ITEM(ID,NAME,...) new Item(ID,NAME, #__VA_ARGS__ )
#__VA_ARGS__
在gcc上编译良好,但在VStudio上给出错误。是否存在可靠且可移植的解决方案?
我想在一个。h文件中有一个ITEM()
的集合,该文件将包含几次ITEM
的不同#定义
GCC和Visual Studio处理可变宏的方式不同,因为宏是基于编译器预处理器的(它们在预处理时展开)。
其中一个不同之处在于它们如何处理空的可变宏。其中一个将允许__VA_ARGS__
为空,而另一个将导致编译错误,如果__VA_ARGS__
为空。
在您的示例中,第一行ITEM(1,FIRST)
将在编译时导致错误,而在其他行上工作正常。
Item(int id,const char *name,void *allwaysNull, const char *props=NULL);
然后像这样初始化宏
ITEM(1,0,FIRST)
ITEM(2,0,SECOND,WithSomeProps)
奇怪的是,从我的经验来看,GCC在可变宏的空VA_ARGS
上有问题…
相关文章:
- Variadic模板未编译
- variadic模板中的模板参数推导失败
- C++ Macros #ifdef
- [temp.variadic]中关于包扩展实例化的措辞
- C++ vcproj OutputDirectory macros
- std::绑定variadic模板和自动返回类型
- is_same和variadic模板编译时错误无效转换
- 限制variadic模板类中的构造函数访问
- 如何制作像类一样的"variadic"向量
- 用于"runtime variadic template"的重载逗号运算符
- variadic函数模板:基于n编译时值在运行时间自动n输入
- variadic函数和折叠表达:试图在Visual Studio 2017中编译时致命误差
- variadic模板代码中的GCC VS MSVC编译误差
- 使用variadic模板和运行时索引构造iterator_range
- variadic宏来创建结构
- 将variadic模板功能转换为许多具体功能
- 将variadic函数作为参数的函数
- C++ Overloading Macros
- Stringize __VA_ARGS__ (C++ variadic macros)
- Variadic macros