1
所以我有一個類想要實例化爲兩個類中的一個。我宣佈它在頭:混合顯式類專業化和類方法專業化?
template <class T>
class MyClass {
public:
bool DoSomethingGeneric();
bool DoSomethingTSpecific();
};
因爲我不想把方法定義的頭,我不是將它們放置在實現文件,並進行明確分工。雖然DoSomethingGeneric
方法一般使用模板來定義的,DoSomethingTSpecific
需要兩個不同的實現,每個爲此我要實例MyClass
兩個可能的類:
template <class T>
bool MyClass<T>::DoSomethingGeneric() {
// Generic code
}
template <>
bool MyClass<ClassA>::DoSomethingTSpecific() {
// ClassA-specific implementation
}
template <>
bool MyClass<ClassB>::DoSomethingTSpecific() {
// ClassB-specific implementation
}
現在,謎語我:在哪裏我把明確的專業化?如果我把它放在我的模板定義之後(像我一般用純粹的泛型類的特辦),鐺說:
explicit specialization of 'MyClass<ClassA>' after instantiation
此消息是伴隨着指針到DoSomethingTSpecific
定義行。這是有道理的。我的理解是,DoSomethingTSpecific
方法的明確專業化被認爲是一種隱含的專業化。
同時,如果我把該特所有的模板定義後,我看到:
no function template matches function template specialization 'DoSomethingTSpecific'
這個人是怎樣的一個謎給我的。
有什麼想法?我怎樣纔能有明確的類級專業化和明確的方法專業化?
不能再現https://godbolt.org/g/zAlT8e – sergej
即再現無關的問題。這一個重現它:https://godbolt.org/g/kbcRK3請注意,增加顯式類專業化。移動專業化會重現這兩個錯誤。 – Alex
這個https://godbolt.org/g/umiA5o怎麼樣? – sergej