相关疑难解决方法(0)

如何将多参数模板传递给宏?

说我有这样的宏:

#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)

似乎额外的括号使模板参数无效.有没有办法解决?

c++ macros templates

12
推荐指数
3
解决办法
6058
查看次数

标签 统计

c++ ×1

macros ×1

templates ×1