是否有某种方法可以使用 C++ 宏获取可选参数?某种类型的重载也很好。
最佳答案
这是一种方法。它使用参数列表两次,首先形成辅助宏的名称,然后将参数传递给该辅助宏。它使用标准技巧来计算宏的参数数量。
enum
{
plain = 0,
bold = 1,
italic = 2
};
void PrintString(const char* message, int size, int style)
{
}
#define PRINT_STRING_1_ARGS(message) PrintString(message, 0, 0)
#define PRINT_STRING_2_ARGS(message, size) PrintString(message, size, 0)
#define PRINT_STRING_3_ARGS(message, size, style) PrintString(message, size, style)
#define GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4
#define PRINT_STRING_MACRO_CHOOSER(...) \
GET_4TH_ARG(__VA_ARGS__, PRINT_STRING_3_ARGS, \
PRINT_STRING_2_ARGS, PRINT_STRING_1_ARGS, )
#define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
int main(int argc, char * const argv[])
{
PRINT_STRING("Hello, World!");
PRINT_STRING("Hello, World!", 18);
PRINT_STRING("Hello, World!", 18, bold);
return 0;
}
这使得宏的调用者更容易,但对于编写者来说则不然。
关于c++ - C++ 宏的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405370/