在可变参数宏中分配参数

pt3*_*Nyc 3 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
Run Code Online (Sandbox Code Playgroud)

我见过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__)))
Run Code Online (Sandbox Code Playgroud)

但是,我无法解决如何将此问题应用于我的问题.任何人都可以提供一个例子来实现上面显示的结果吗?谢谢!

Col*_*mbo 6

使用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__))
Run Code Online (Sandbox Code Playgroud)

演示.这将(AFAIR)最多可以处理255个参数.