如何在c++中使用__VA_ARGS__重复代码?

5t7ly7z5  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(108)

我想在C++中创建一个宏,它可以执行以下操作。

#define SETUP_BULK(...) \
SETUP_HELPER(__VA_ARG__) \ // repeat this for all __VA_ARGS__

这是可能的吗?我在迭代__VA_ARGS__时查找了其他问题,但无济于事。
我不能使用宏以外的任何东西,否则就会违背我的目标--用我的自定义JSON解析器动态地设置结构。
例如:

SETUP_BULK(Struct_A, Struct_B, Struct_C)

会变成

SETUP_HELPER(Struct_A);
SETUP_HELPER(Struct_B);
SETUP_HELPER(Struct_C);
b4lqfgs4

b4lqfgs41#

如果您坚持在宏级别执行此操作,最简单的解决方案是使用Boost.Preprocessor

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

// ...

#define SETUP_HELPER2(r, data, elem) SETUP_HELPER(elem)

#define SETUP_BULK(...) \
BOOST_PP_SEQ_FOR_EACH(SETUP_HELPER2, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))

Demo

相关问题