同じクラスへのポインタを持つテンプレートクラスを持っていますが、必ずしも同じタイプを使用する必要はありません。ここに例があります:テンプレートクラスの汎用テンプレートポインタ
template<class T>
class Foo{
Foo(){}
Foo* a;
template<class U>
void bar(Foo<U>* b){a=b;}
}
私の主な機能で使用すると、引数として別のテンプレートを使用するまですべてが機能しているようです。
int main(){
Foo<double> f1;
Foo<double> f2;
f1.bar(&f1);// no Errors
Foo<bool> f3;
Foo<double> f4;
f3.bar(&f4);//Error : cannot convert 'Foo<double>*' to 'Foo<bool>*'
}
あり、とにかく私はそれで同じクラスに「汎用」ポインタを持つクラスFoo
内のポインタを定義することができますか?
あなたが求めていることは私には分かりません。どんな種類の 'Foo'を指すポインタを要求していますか?もしそうなら、 'Foo 'を、テンプレート化されていない基底クラスから派生させることを検討してください。 –
"同じクラス(ただし必ずしも同じ型ではない)" - いいえ、**クラス**は** one **型を定義します。 **同じテンプレートの異なるインスタンス化**を話しています。テンプレートとクラスを混乱させないでください。彼らは2つの異なったものです。クラステンプレートは、クラスを作成するための**パターン**です。それはクラスではありません。 –
@FrançoisAndrieuxはい、それはまさに私が意味していたものです。あなたが提案した解決策は問題を解決しましたが、その場合、私はFooに属するものを使用できません。例えば 'eval'というテンプレート関数があるとします:' a-> eval() '' FooBaseにはevalという名前のメンバはありません。 – Elirovi