2011-08-01 14 views
4

テンプレートの暗黙の変換コード付き

template <typename T> 
class MyClass 
{ 
    public: 

     MyClass(const MyClass& other) 
     { 
      //Explicit, types must both match; 
     }  

     template <typename U> 
     MyClass(const MyClass<U>& other) 
     { 
      //Implicit, types can copy across if assignable. 
      //<?> Is there a way to make this automatically happen for memberwise 
      //copying without having to define the contents of this function? 

      this->value = other.getValue(); 
     } 

    privte: 

     T value; 
}; 

次の場合は、真のようになります。

MyClass<float> a; 

MyClass<float> b = a; //Calls explicit constructor which would have been auto-generated. 

MyClass<int> c; 

MyClass<float> d = c; //Calls implicit constructor which would not have been auto gen. 

私の質問は:このような暗黙のコピーコンストラクタを取得する方法があるが、ありませんどのように動作するかを定義しなければなりませんか?デフォルトでクラスが作成されるときには、コピー、代入、および標準コンストラクタがすべて提供されます...可能であれば、テンプレートを使用する場合には暗黙のコンバージョンコンストラクタを自由に得ることができればうれしいでしょう。

私はそれは不可能だと思っていますが、誰かがなぜそれが私に当てはまるのか説明することができますか?

ありがとうございます!

+0

今後、Cプログラミング言語に関連する質問にのみCタグを入れてみてください。 – nmichaels

+0

私は、コンパイラが暗黙のコピーを許可するのではないかと疑います。結局のところ、クラスは継承の意味では関係していません。 – Vlad

答えて

1

擬似コピーコンストラクタテンプレートを生成することはできません。どうして? MyClass<T>MyClass<U>

から全く別の何かなることがあるので、この私のオリジナルの答えではありません。私は疑問を誤解していました。申し訳ありません