Say I have a macro like this:
#define SET_TYPE_NAME(TYPE, NAME)
template<typename T>
std::string name();
template<>
std::string name<TYPE>() {
return NAME;
}
This won't work if I pass it a template that has more than one parameter, because the comma in the <int, int>
is interpreted as separating the macro arguments, not the template arguments.
SET_TYPE_NAME(std::map<int, int>, "TheMap")
// Error: macro expects two arguments, three given
This problem seems to be solved by doing this:
SET_TYPE_NAME((std::map<int, int>), "TheMap")
But now another problem arises, one that I really did not expect:
template<>
std::string name<(std::map<int, int>)>()
// template argument 1 is invalid
It seems that the extra parentheses make the template argument invalid. Is there any way around this?
See Question&Answers more detail:os