亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++宏的可選參數

C ++宏的可選參數

C++
躍然一笑 2019-11-08 10:45:07
有什么方法可以通過C ++宏獲取可選參數?某種重載也是很好的。
查看完整描述

3 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

這是一種方法。它兩次使用參數列表,首先形成助手宏的名稱,然后將參數傳遞給該助手宏。它使用標準技巧來計算宏參數的數量。


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;

}

這使宏的調用者(而不是寫者)更容易。


查看完整回答
反對 回復 2019-11-08
  • 3 回答
  • 0 關注
  • 758 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號