【发布时间】:2014-09-06 09:08:59
【问题描述】:
我之前问过以下问题,但该解决方案似乎不适用于这种特殊情况。
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,这是一个简化的例子,在我的实际代码中
CODE_CONTAINING_COMMA是自定义的class声明,所以我认为BOOST_PP_COMMA_IF不会有太大帮助。跨度> -
嗯,有一种技术也可能有所帮助:coliru.stacked-crooked.com/a/b75fdccefcec6b7c
-
嗯,这对我来说扩展得很好,因为逗号括在括号中。
-
@chris 这个链接看起来很有趣,我认为这是一个很好的解决方案!