按值替换表达式?

时间:2015-12-11 09:01:10

标签: c++ c-preprocessor

我有以下宏:

#define REFLECTABLE(...) \
REFLECTABLE_CONST(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)==0, __VA_ARGS__)

我运行了预处理器。它传递给REFLECTABLE_CONST 3==0而不是0false。在REFLECTABLE_CONST中,我使用该值来模拟this帖子中描述的条件。所以,我需要预处理器传递一个值。有没有办法让3==0false之类的预处理器替代0

2 个答案:

答案 0 :(得分:2)

我无法复制BOOST_PP_VARIADIC_SIZE能够获得0的结果,但如果可以的话,这应该有效:

#define IS_EMPTY_IMPL0 1
#define IS_EMPTY_IMPL1 0
#define IS_EMPTY_IMPL2 0
#define IS_EMPTY_IMPL3 0
#define IS_EMPTY_IMPL4 0
#define IS_EMPTY_IMPL5 0
#define IS_EMPTY_IMPL6 0
#define IS_EMPTY_IMPL7 0
#define IS_EMPTY_IMPL8 0
#define IS_EMPTY_IMPL9 0

#define IS_EMPTY(...) BOOST_PP_CAT(IS_EMPTY_IMPL, BOOST_PP_VARIADIC_SIZE(__VA_ARGS__))

#define REFLECTABLE(...) \
REFLECTABLE_CONST(IS_EMPTY(__VA_ARGS__), __VA_ARGS__)

答案 1 :(得分:2)

偶然发现了这个解决方案。只需使用它:

#define REFLECTABLE(...) \
REFLECTABLE_CONST(BOOST_PP_IS_EMPTY(__VA_ARGS__), __VA_ARGS__)