割り当て問題C ++テンプレートクラス

あなたはクラスの割り当てを達成する必要がある場合は、次のクラステンプレートについては、アサイン()関数を使用します。以下の

テンプレート< クラス T>
 クラスのMyClass {
 プライベート
    T値。
公共ボイドのsetValue(T&_value){  = _value。
    } 
    ボイド割り当て(CONST MyClassの<T>&x)は{  = x.value。
    } 
    TのgetValue(){ 
        戻り値。
    } 
}。
INTメイン(ボイド
{ 
    MyClassの < ダブル > D。
    MyClassの < ダブル> DD;
    ダブル TEMP = 23.123 ; 
    d.setValue(TEMP)。
    dd.assign(D)。
    COUT << d.getValue()<< ENDL << dd.getValue()<< ENDL。
    リターン 0 ; 
}

二つのクラス場合Tは同じではない場合、()メソッドの割り当てを割り当て使用

INTメイン(ボイド
{ 
    MyClassの < ダブル > D。
    MyClassの < 整数 > I。
    ダブル TEMP = 23.123 ; 
    d.setValue(TEMP)。
    i.assign(D)。
    COUT << d.getValue()<< ENDL << i.getValue()<< ENDL。
    リターン 0 ; 
}

次の問題

あなたが見ることができ、アサイン()関数は、引数として、Aのconst MyClassの<整数>のタイプを対象としたいですが、MyClassの<ダブル>オブジェクトを得ました。一方、MyClassのは、<ダブル>のconst MyClassの<整数>に変換することができない場合、コンパイラはエラーを報告します。

 

私たちは、上記の割り当ては同じことを行うようにすることを、どのようなMyClassのアサイン機能を再定義する必要があります。

    テンプレート < クラス X-> // X-追加
     空隙 ASSIGN(CONST MyClassの<X->・X)を{//割り当てはX-の別のタイプとして定義することに対するX  = x.getValue(); 
    }

したがって、上記の割り当てが動作することができます。

長いXからTへの割り当てなどを行うことができるように、この割り当て機能を行うことができます。実際には、これはパラメータにするために機能を割り当てることを避けるためにあるTは、オブジェクトが属する割り当てる必要がありますと同じ。

おすすめ

転載: www.cnblogs.com/mindulmindul/p/12149235.html