C++ 是否可以有一个默认的复制构造函数和一个模板化的转换构造函数?

C++ 是否可以有一个默认的复制构造函数和一个模板化的转换构造函数?,c++,templates,constructor,C++,Templates,Constructor,如果我有这样的课 template <typename T> class MyClass { T myData; public: T getValue() { return myData; } template <typename V> MyClass(const MyClass<V>& other) : myData((T) other.getValue()) { }

如果我有这样的课

template <typename T>
class MyClass
{
    T myData;

public:
    T getValue() { return myData; }        

    template <typename V>
    MyClass(const MyClass<V>& other) :
        myData((T) other.getValue())
    {
    }
};
模板
类MyClass
{
Myt数据;
公众:
T getValue(){return myData;}
模板
MyClass(常数MyClass和其他):
myData((T)other.getValue())
{
}
};
这意味着我提供了一个复制构造函数(对于V=T),因此根据这个链接,我不会得到默认的移动构造函数等


有没有一种方法可以让模板构造函数只作为转换构造函数工作,所以对于V=你的前提是错误的。构造函数模板从不用于实例化副本(或移动)构造函数。换句话说,复制/移动构造函数始终是非模板成员函数,即使成员函数模板可以生成具有适当复制/移动签名的构造函数


因此,除了模板之外,您的类还将有一个普通的复制构造函数。

您的类没有用户定义的复制构造函数。复制构造函数永远不是模板。出于兴趣,如果我们明确地
删除
d复制构造函数,那么模板会被用来代替它吗?@Bathsheba我强烈怀疑这一点。已删除的函数已存在,因此仍将选择该函数。只是它的使用形式不正确。