2017-01-29 27 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