【发布时间】:2014-06-30 01:17:19
【问题描述】:
宏参数中不允许有逗号,因为它将被视为多个参数,并且预处理将是错误的。但是,我们可以将参数括起来,让预处理器将其视为一个参数。是否有可以删除括号的宏或其他技术?
例如,如果我定义一个宏
#define MY_MACRO(a, b) ...
并像使用它
MY_MACRO( A<int, double>, text );
会错的。像这样使用它
MY_MACRO( (A<int, double>), text)
使用宏或技术来删除括号就可以了。 Boost 只为类型提供了BOOST_IDENTITY_TYPE 宏,而不是一般情况
【问题讨论】:
-
解决方法 -
typedef A<int, double> IA; MY_MACRO(IA, text); -
typedef 比所有预处理器 hack 恕我直言更优雅
标签: c++ macros c-preprocessor