模板隐式转换

时间:2011-08-01 19:48:28

标签: c++ templates

使用代码:

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.

我的问题是:有没有办法获得这样的隐式复制构造函数,但不必定义它是如何工作的?默认情况下创建一个类时,都会提供复制,赋值和标准构造函数...如果可能的话,在使用模板时能够获得一个隐式转换构造函数会很好。

我猜它不可能但有人可以解释为什么如果是这样的话对我来说呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

您不能让编译器为您生成伪拷贝构造函数模板。为什么?因为MyClass<T>可以是 完全 ,与MyClass<U>不同

这不是我原来的答案。我误解了这个问题,对不起