說我有這樣一個宏:如何將多參數模板傳遞給宏?
#define SET_TYPE_NAME(TYPE, NAME) \
template<typename T> \
std::string name(); \
\
template<> \
std::string name<TYPE>() { \
return NAME; \
}
這不會工作,如果我通過它有多個參數的模板,因爲在<int, int>
逗號被解釋爲分離宏參數,而不是模板參數。
SET_TYPE_NAME(std::map<int, int>, "TheMap")
// Error: macro expects two arguments, three given
這個問題似乎是這樣解決:
SET_TYPE_NAME((std::map<int, int>), "TheMap")
但現在出現了另一個問題,一個是我真的沒有想到:
template<>
std::string name<(std::map<int, int>)>()
// template argument 1 is invalid
似乎多餘括號使模板參數無效。有沒有辦法解決?
只是C++ 11,除非C99加入'template'趁我們不看。 –
@KennyTM:該死的,比我早一分鐘! –
@MikeDeSimone:__VA_ARGS__是在C99中引入的,所以C++編譯器(例如gcc 4.2)可以用C++作爲非標準擴展來支持它。 – kennytm