我早些时候问过以下问题,但该解决方案在这种情况下似乎不起作用。如何在BOOST_PP_IF中扩展包含逗号的宏
How do I print out a comma multiple times using Boost Preprocessor
我试图展开包含逗号有条件的宏。下面是一个例子示出了该问题:
#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,MACRO_CONTAINING_COMMA(z, z),MACRO_CONTAINING_COMMA(z, z))
#define MACRO_CONTAINING_COMMA(_NAME, _NAME2) _NAME TIBRA_EATEN_COMMA() _NAME2
#define EATEN_COMMA BOOST_PP_IF(1,BOOST_PP_COMMA,BOOST_PP_TUPLE_EAT())
TEST(1,2,3,4)
此膨胀以
BOOST_PP_IIF BOOST_PP_IIF BOOST_PP_IIF BOOST_PP_IIF
当它应该扩展到
0,0 1, 1 2,2 3,3
'BOOST_PP_COMMA_IF'有帮助吗? – chris
@chris,这是一个简化的例子,在我的实际代码中'CODE_CONTAINING_COMMA'是一个自定义的'class'声明,所以我不认为'BOOST_PP_COMMA_IF'会帮助很多。 – arman
那么,有一种技术可能也可能有所帮助:http://coliru.stacked-crooked.com/a/b75fdccefcec6b7c – chris