3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
如果你不能使用括號(hào)而你不喜歡Mike的SINGLE_ARG解決方案,那么只需定義一個(gè)COMMA:
#define COMMA ,FOO(std::map<int COMMA int>, map_var);
如果您想要對(duì)某些宏參數(shù)進(jìn)行字符串化,這也會(huì)有所幫助,如
#include <cstdio>#include <map>#include <typeinfo>#define STRV(...) #__VA_ARGS__#define COMMA ,#define FOO(type, bar) bar(STRV(type) \ " has typeid name \"%s\"", typeid(type).name())int main(){ FOO(std::map<int COMMA int>, std::printf);}
打印std::map<int , int> has typeid name "St3mapIiiSt4lessIiESaISt4pairIKiiEEE"
。

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您的預(yù)處理器支持可變參數(shù)宏:
#define SINGLE_ARG(...) __VA_ARGS__
#define FOO(type,name) type name
FOO(SINGLE_ARG(std::map<int, int>), map_var);
否則,它有點(diǎn)單調(diào)乏味:
#define SINGLE_ARG2(A,B) A,B
#define SINGLE_ARG3(A,B,C) A,B,C
// as many as you'll need
FOO(SINGLE_ARG2(std::map<int, int>), map_var);
- 3 回答
- 0 關(guān)注
- 1707 瀏覽
添加回答
舉報(bào)