C ++宏的可选参数

有什么方法可以通过C ++宏获取可选参数?某种重载也是很好的。



跃然一笑
浏览 716回答 3
3回答

哈士奇WWW

这是一种方法。它两次使用参数列表,首先形成助手宏的名称,然后将参数传递给该助手宏。它使用标准技巧来计算宏参数的数量。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;}这使宏的调用者(而不是写者)更容易。
打开App,查看更多内容
随时随地看视频慕课网APP