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」(例如整型)。 –