フー。
template<typename A, typename B>
class Foo{
public:
Foo();
/*..*/
};
Foo.cpp
template<typename A, typename B>
Foo<A, B>::Foo(){/*...*/}
template<typename A>
Foo<A, Beta>::Foo(){/* some specialized construction */} //<- this doesn't work.
template<>
Foo<Alpha, Beta>::Foo(){/*...*/} // <-will work, but I want partial specialization.
コンパイルすると、部分的に特殊化されたコンストラクターがエラーをスローします
宣言のネストされた名前指定子 'Foo::' は、クラス、クラス テンプレート、またはクラス テンプレートの部分的な特殊化を参照していません
この部分的に特殊化されたクラスをどこかで宣言する必要があると思いますが、同じクラスを再宣言し続ける必要はありません...つまり、ヘッダーファイルに次を配置する必要はありません。
template<typename A>
class Foo_Beta : public Foo<A, Beta>{
public:
Foo_Beta();
}
//in cpp
template<typename A>
Foo_Beta<A>() : Foo<A, Beta>() {/**specialized constructor stuff**/}
Foo_Beta コンストラクターを使用するFoo()を構築できないからです。
私はもう試した
template<typename A>
class Foo<A,Beta> : public Foo<A, Beta>{
public:
Foo();
}
しかし、それもコンパイルされません。
本質的に、そのクラスにすべての内部関数を再宣言せずに、クラスの部分的な特殊化を宣言する構文は何ですか?