2017-01-29 13 views
0

同じタイプのクラスT1のオブジェクトを引数として取り、タイプTのオブジェクトを作成するクラスのコンストラクタを作成する必要があります。タイプ<T1>のオブジェクトから<T>のオブジェクトを作成するコンストラクタ

コンパイラは、変換T1 -> Tを実行できるかどうかを判断するものです。

例:。:私は

Object<int> o; 
Object<double> o1(o); 

を持っている場合、それは精度を失うことはありませんので、これは動作するはずです。これは、逆の方法では動作しません(整数型オブジェクトのdouble値をコピーする)。 誰かが助けてください/これを行う方法を教えてもらえますか?

+0

実際の問題は何ですか?精度が失われているかどうか正しく判断する非整数型の精度をどのように定義しますか? –

+0

実際に浮動小数点から整数への変換は、クラスによって処理されるのではなく、ユーザーによって処理されるべきです。あなたがそれをやりたければ許されます。 – DeiDei

+0

私の一般的な問題は次のとおりです:私はvaleが格納されているインデックス(int行int col)とテンプレート値(配列に追加する実際の値)を持つ2dのような配列クラスを実装しています。私はタイプUの配列を既存の配列から作成しなければなりません。この問題のテキストは次のように書かれています:キャストコントロール(U-> T)をコンパイラに委譲してください – user7337963

答えて

4

テンプレートコピーコンストラクタはどうですか?

template<typename T> 
class Object 
{ 
    template<typename U> 
    Object(const Object<U>& rhs) 
     : val(rhs.val()) // initialize appropirate members 
    { 
     // here you can assert what types U can be 
     static_assert(!(std::is_integral<T>::value && 
         std::is_floating_point<U>::value), 
        "Can't construct Object<Integral> with Object<FloatingPoint>"); 
    } 
}; 
+0

答えをありがとう、しかし、私はそれを働かせることはできません。 私のクラスはテンプレートstruct(int i; int j; T val)に基づいており、私のクラスでは次のように宣言されています:structName * arr; – user7337963

+0

質問に関連するすべての情報を掲載しておく必要があります。 – DeiDei

+0

はい、申し訳ありません、私の悪い。 – user7337963

関連する問題