例如
template<class T>
T make()
{
return T();
}
我希望在T是类模板A时专门化它;
template<int N>
class A
{};
template<int N>
A<N> make<A<N>>()
{
...
};
编译错误:非法使用显式模板参数
怎么做?
答案 0 :(得分:1)
您要做的是部分专业化,不允许。最好将其包装在struct
。
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>();
}
};
答案 1 :(得分:0)
这不是部分专业化,而是过载。只需删除<A<N>>
:
template<int N>
A<N> make()
{
...
};