0
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>>()
{
...
};
错误编译:非法使用显式模板参数
怎么办呢?
你所要做的是部分专业化,是不允许的。将它包装在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>();
}
};
这不是一个部分专业化,而是一个过载。只是删除<A<N>>
:
template<int N>
A<N> make()
{
...
};
这是一个部分专业化。你做了一个新的方法使()返回A 以外的int。 –
user1899020
@ user1899020您使用的是类型''('让()')在首个过载。在这里你需要一个'int'('make <0>()')。部分专业化将会更加专业化的“T”(例如整型)。 –