用值替换表达式

Substitute expression by value?

本文关键字:表达式 替换      更新时间:2023-10-16

我有以下宏:

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

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

我无法再现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__)

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

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