带有升压预处理器的宏参数包
macro parameter pack with boost preprocessor
我不知道有类似的问题。
如何简化
(a == 78 || a == 98 || a == 73 || a == 11 || a == 90 || a==103 || a==45 )
表达
MY_CHECK(a, (78, 98, 73, 11, 90, 103, 45) )
使用Boost预处理器??
Boost预处理器中是否有任何现成的解决方案。
我找不到比转换更好的折叠,因为 BOOST_PP_SEQ_FOLD_LEFT
不会随身携带 data
参数。仍然:
#define MY_CHECK_FOLD_OR(s, a, b) a || b
#define MY_CHECK_FOLD_EQ(s, var, elem) (var) == (elem)
#define MY_CHECK(var, values)
(BOOST_PP_SEQ_FOLD_LEFT(
MY_CHECK_FOLD_OR, false,
BOOST_PP_SEQ_TRANSFORM(
MY_CHECK_FOLD_EQ, var,
BOOST_PP_TUPLE_TO_SEQ(values)
)
))
...扩展:
if (MY_CHECK(a, (1, 2, 3)))
...进入:
if ((false || (a) == (1) || (a) == (2) || (a) == (3)))
看到它活在Coliru
无需在此处使用预处理器。 variadic模板会很好。这是使用C 17 fold表达式的示例:
template <typename Needle, typename... Haystack>
bool my_check(const Needle& needle, const Haystack&... haystack)
{
return ((needle == haystack) || ...);
}
wandbox上的实时示例
相关文章:
- 有没有办法在从编译器获取参数时避免预处理器宏?
- C/C++预处理器:提取每秒的可变参数
- 如何计算预处理器宏中的参数以传递给 sizeof?
- 带有升压预处理器的宏参数包
- 用于在 Visual Studio 中为整个项目或解决方案定义带有参数的预处理器宏的选项
- 预处理器宏可以只扩展一些粘贴的参数吗?
- 在预处理器中拆分参数C++
- 作为预处理器宏参数的多行原始字符串文字
- 预处理器和模板参数或代码段的条件编译
- C++ 预处理器宏循环__VA_ARGS__ 1 与 2+ 参数
- 将宏预处理器为其他宏的参数
- 使用提升预处理器以迭代方式调用可变参数模板
- 如何在带有模板参数的预处理器中使用sizeof
- C/ c++预处理器中的宏参数字符串化为宽字符串字面值
- 为{0,1}参数重载预处理器宏
- c++预处理器不知道模板参数
- c++预处理器条件参数
- 模板/预处理器的hack可以用来支持参数列表中间的变量参数吗?
- vc++预处理器参数计数限制
- 预处理器交换参数