c++ - How to pass multi-argument templates to macros? -


say have macro 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 pass template has more 1 parameter, because comma in <int, int> interpreted separating macro arguments, not template arguments.

set_type_name(std::map<int, int>, "themap") // error: macro expects 2 arguments, 3 given 

this problem seems solved doing this:

set_type_name((std::map<int, int>), "themap") 

but problem arises, 1 did not expect:

 template<>  std::string name<(std::map<int, int>)>()  // template argument 1 invalid 

it seems parentheses make template argument invalid. there way around this?

besides typedef, switch order of arguments , use variadic macros (requires c99 or c++11-compatible compiler):

#define set_type_name(name, ...) \ template<typename t>          \ std::string name();           \                               \ template<>                    \ std::string name<__va_args__>() {    \     return name;              \ } 

...

set_type_name("themap", std::map<int, int>) 

Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -