以下の設計は可能ですか?:
template <typename T>
class Test{
public:
template <typename Z>
void doSomething();
//rest of things
private:
T obj;
//some things
};
可能であれば、doSomethingに明示的な特殊化を行って、最終的に次のようなバージョンを作成します。
void doSomething<int>(){
//do something
}
void doSomething<double>(){
//do something
}
...etc
これは不可能のようですが、仕事をするための構文が見つからないので、すべてのテンプレート引数をテンプレートクラス自体に渡すように、次のように設計する必要があると思いました。
template <typename T,typename Z>
class Test{
public:
void doSomething();
//rest of things
private:
T obj;
//some things
};
次に、コンパイルすらしなかった部分的な特殊化を試しました。
template <typename T>
void Test<T,int>::doSomething(){
//do something
}
template <typename T>
void Test<T,double>::doSomething(){
//do something
}
...etc
明示的な特殊化で次のエラーが発生しました。
エラー#1:クラステンプレート名に続くテンプレート引数リストは、テンプレートパラメータリストで使用されている順序でパラメータをリストする必要があります。
エラー#2:'Container1':テンプレート引数が少なすぎます。