我需要使用可变参数宏扩展到一类的多种变化。 因为他们需要根据宏观输入我不能简单地使用模板来有不同的名称。 问题是,我无法展开逗号( ,
)符号,和我的类有服用多种参数(这是我需要使用逗号符号)功能。
boost
提供了BOOST_PP_COMMA()
这将扩展为一个逗号宏,但它仅适用循环结构之外。 我猜问题是BOOST_PP_COMMA()
的一次扩大,然后作为一个逗号,此时程序中断治疗。
为了说明问题,假设我有宏函数,它接受的参数的可变参数数,并产生一个数逗号等于提供给它的参数的数目的。 天真的解决办法是这样的:
#define TEST(...)\
BOOST_PP_REPEAT( \
BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), \
MACRO, \
BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__))
#define MACRO(z, n, data) BOOST_PP_IF(1,BOOST_PP_COMMA(),BOOST_PP_COMMA())\
但是,这产生了一系列的错误,因为逗号扩大和宏认为他们分裂参数。
有没有解决这个问题的任何方式?