C++11 当模板参数是类模板时,如何专门化函数模板?
比如说C++11 当模板参数是类模板时,如何专门化函数模板?,c++11,template-specialization,function-templates,C++11,Template Specialization,Function Templates,比如说 template<class T> T make() { return T(); } 当T是一个类模板a时,我想专门化它 template<int N> class A {}; template<int N> A<N> make<A<N>>() { ... }; 编译错误:非法使用显式模板参数 怎么做?您试图做的是部分专门化,是不允许的。最好将其包装在结构中 这不是部分专门化,而是过载。只需删除:
template<class T>
T make()
{
return T();
}
当T是一个类模板a时,我想专门化它
template<int N>
class A
{};
template<int N>
A<N> make<A<N>>()
{
...
};
编译错误:非法使用显式模板参数
怎么做?您试图做的是部分专门化,是不允许的。最好将其包装在结构中
这不是部分专门化,而是过载。只需删除:
这是部分专业化。您创建了一个新方法make,该方法返回的不是int。@user1899020在第一个重载中使用的是make类型。这里你想要一个整型的。部分专门化将简化为更专门化的类型,例如整型。
template<class T>
struct Maker
{
T make() { return T(); }
};
template<int N>
class A
{};
template<int N>
struct Maker<A<N>>
{
A<N> make()
{
return A<N>();
}
};
template<int N>
A<N> make()
{
...
};