2017-01-29 49 views
0

我需要爲我的類的構造函數是把參數作爲同一類T1類型的對象,並創建T類型的對象的對象創建 類型的對象。 構造,從類型<T1>

編譯器是決定是否可以完成轉換T1 -> T的人。

例如:如果我有

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

這應該工作,因爲它不會失去精度。它不應該反過來(在整型對象中複製double值)。 有人可以請幫助/告訴我如何做到這一點?

+0

什麼是您的實際問題?正確判斷精度是否正在丟失?你如何定義非整型類型的精度? –

+0

真的,從浮點到積分的轉換不應該由您的班級處理,而應該由用戶來處理。如果你想要這樣做,這是允許的。 – DeiDei

+0

我的一般問題是:我正在實現一個類似2d的數組類,它具有存儲vale的索引(int row int col)和一個模板值(我添加到數組中的實際值)。我必須從現有的U型數組中創建一個T型數組。這個問題的文本說:委託給編譯器鑄造控制(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