2

テンプレート化されたクラスがあり、メンバー関数がそのクラスのオブジェクトを任意のテンプレート パラメーターと共に取得する必要があります。したがって、次のようなものを実行できるはずです。

main(){
     A<double> object1;
     A<double> object2;
     A<int> object3;

     object1.f(object2);
     object1.f(object3);
}

これは私がこれまでに持っているものですが、引数が呼び出し元のオブジェクトとまったく同じ型である必要があると想定しているため、機能していないようです:

template<typename T>
class A
{
    void f(A<T> &a);
}

何か案は?前もって感謝します。

4

3 に答える 3

3

fそれ自体が、独自のテンプレート パラメータを持つテンプレートである必要があります。

template<typename T>
class A
{
    template <typename U>
    void f(A<U>& a);
}

を呼び出すとobject1.f(object2)、=fでインスタンス化されます。を呼び出すと、=でインスタンス化されます。Udoubleobject1.f(object3)fUint

どちらの場合もT=は typeであり、クラス template のテンプレート パラメーターであるdoubleためです。object1A<double>TA

于 2012-08-09T16:59:28.063 に答える
1

メンバー関数テンプレートが必要です:

template <typename T>
class A
{
    template <typename U>
    void f(A<U>& a)
    {
        //...
    }
};
于 2012-08-09T17:00:30.163 に答える
1

しかし、引数が呼び出し元のオブジェクトとまったく同じ型である必要があると想定しているため、機能していないようです。

もちろん、そうするように指示するので、そうします:

template<typename T>
class A
{
    void f(A<T> &a);
}

fおそらく、テンプレート自体を作成したいと思うでしょう:

template<typename T>
class A
{
    template <typename T1>   //<--- different type
    void f(A<T1> &a);
}
于 2012-08-09T17:00:32.523 に答える