c++ - 在可变参数宏中分配参数

标签 c++ c c-preprocessor variadic-macros

我想构造一个宏,它接受可变数量的参数,并以类似于下面所示示例的格式将第一个参数分配给每个后续参数:

Call:   MACRO(F,A)
Result: F:A

Call:   MACRO(F,A,B,C)
Result: F:A F:B F:C

我看过https://github.com/swansontec/map-macro以及递归解决方法的一般概念:

#define EVAL0(...) __VA_ARGS__
#define EVAL1(...) EVAL0 (EVAL0 (EVAL0 (__VA_ARGS__)))
#define EVAL2(...) EVAL1 (EVAL1 (EVAL1 (__VA_ARGS__)))
#define EVAL3(...) EVAL2 (EVAL2 (EVAL2 (__VA_ARGS__)))
#define EVAL4(...) EVAL3 (EVAL3 (EVAL3 (__VA_ARGS__)))
#define EVAL(...)  EVAL4 (EVAL4 (EVAL4 (__VA_ARGS__)))

但我想不通如何将其应用于我的问题。任何人都可以提供一个例子来实现上面显示的结果吗?谢谢!

最佳答案

使用 Boost.PP:

#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>

#define TRANSFORM(r, data, elem) data:elem

#define MACRO(F, ...) \
    BOOST_PP_SEQ_FOR_EACH(TRANSFORM, F, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))

Demo .这将(AFAIR)适用于最多 255 个参数。

关于c++ - 在可变参数宏中分配参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765387/

相关文章:

c - 此 C 继承实现是否包含未定义的行为?

c - C/C++ 中检查密码强度的算法

c++ - 包含#include 指令的宏定义

c++ - 使用 CMake 获取预处理器定义值

c++ - C 预处理器包含和路径

C++静态变量动态

android - OpenSL ES - 安卓工作室 - NDK 10R

c++ - 使线程按顺序重做打印功能

c++ - 在 C++ 中,加载是否可以在获取操作下方滑动/存储可以在释放上方 float 吗?

c - 交替序列查找器