<分区>
我们可以为宏参数指定默认参数值吗?
我知道没有任何类型检查,所以我希望默认值只不过是预处理器在未指定参数值的情况下用于宏扩展的一些文本。
标签 c++ c macros c-preprocessor
<分区>
我们可以为宏参数指定默认参数值吗?
我知道没有任何类型检查,所以我希望默认值只不过是预处理器在未指定参数值的情况下用于宏扩展的一些文本。
最佳答案
你正在寻找一个宏重载机制,它在例如Boost.PP's facilities .
#define MACRO_2(a, b) std::cout << a << ' ' << b;
#define MACRO_1(a) MACRO_2(a, "test") // Supply default argument
// Magic happens here:
#define MACRO(...) BOOST_PP_OVERLOAD(MACRO_, __VA_ARGS__)(__VA_ARGS__)
Demo.参数的数量与宏名称连接在一起,无需 Boost 即可轻松实现,如下所示:
#define VARGS_(_10, _9, _8, _7, _6, _5, _4, _3, _2, _1, N, ...) N
#define VARGS(...) VARGS_(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
#define CONCAT_(a, b) a##b
#define CONCAT(a, b) CONCAT_(a, b)
和
#define MACRO_2(a, b) std::cout << a << ' ' << b;
#define MACRO_1(a) MACRO_2(a, "test") // Supply default argument
#define MACRO(...) CONCAT(MACRO_, VARGS(__VA_ARGS__))(__VA_ARGS__)
Demo .
关于c++ - C/C++预处理器宏可以有默认参数值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049491/