c++ - 用值替换表达式?

标签 c++ c-preprocessor

我有以下宏:

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

我运行了预处理器。它传递给 REFLECTABLE_CONST 3==0 而不是 0false。在 REFLECTABLE_CONST 中,我使用该值来模拟条件,如 this 中所述。邮政。所以,我需要预处理器来传递一个值。有没有办法让预处理器用 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__)

关于c++ - 用值替换表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34219593/

相关文章:

c++ - 在类中复制和存储 LPTSTR 会导致崩溃

c++ - OpenCV 预期的构造函数、析构函数或类型转换

c# - Visual Studio 2008 中 C# 项目中的 C++ 项目引用

C++ #define 我的我 ->

c++ - 在CUDA中乘以矢量化二维方阵和压缩三对角矩阵

c++ - 如何限制在 VS 设计器中创建的编辑框中的数字

c++ - C++ 预处理器是否与 C 预处理器相同?

haskell - 我在哪里可以了解#ifdef?

objective-c - #if TRUE vs #if YES vs #if 1 在 Objective-C 中有什么不同?

ios - 在 Objective c 中动态改变全局变量