【问题标题】:Substitute expression by value?按值替换表达式?
【发布时间】:2016-03-17 03:12:12
【问题描述】:

我有以下宏:

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

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

【问题讨论】:

  • 不,预处理器是一种文本替换机制。

标签: c++ c-preprocessor


【解决方案1】:

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

【讨论】:

  • 对于未来的访问者:我接受了这个回复,因为它按原样处理问题。但是,请参阅我自己的答案,它为实际问题提供了一个更简单的解决方案。
【解决方案2】:

偶然发现了这个解决方案。改用这个:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 2023-01-11
  • 2019-05-23
  • 1970-01-01
  • 2021-10-11
  • 2014-04-30
相关资源
最近更新 更多