说我有这样的宏:
#define SET_TYPE_NAME(TYPE, NAME) \
template<typename T> \
std::string name(); \
\
template<> \
std::string name<TYPE>() { \
return NAME; \
}
Run Code Online (Sandbox Code Playgroud)
如果我传递一个具有多个参数的模板,这将无效,因为其中的逗号<int, int>被解释为分隔宏参数,而不是模板参数.
SET_TYPE_NAME(std::map<int, int>, "TheMap")
// Error: macro expects two arguments, three given
Run Code Online (Sandbox Code Playgroud)
这样做似乎可以解决这个问题:
SET_TYPE_NAME((std::map<int, int>), "TheMap")
Run Code Online (Sandbox Code Playgroud)
但现在出现了另一个问题,我真的没想到的问题:
template<>
std::string name<(std::map<int, int>)>()
// template argument 1 is invalid
Run Code Online (Sandbox Code Playgroud)
似乎额外的括号使模板参数无效.有没有办法解决?