如果我有这样的课程
template <typename T>
class MyClass
{
T myData;
public:
T getValue() { return myData; }
template <typename V>
MyClass(const MyClass<V>& other) :
myData((T) other.getValue())
{
}
};
这意味着我提供了一个复制构造函数(对于V = T),因此根据此链接Why no default move-assignment/move-constructor?我没有得到默认移动构造函数等。
有没有办法让模板化构造函数仅用作转换构造函数,所以对于V!= T?
答案 0 :(得分:5)
你的前提是错的。从不使用构造函数模板来实例化复制(或移动)构造函数。换句话说,复制/移动构造函数始终是非模板成员函数,即使成员函数模板可以生成具有相应复制/移动签名的构造函数。
因此,除了模板之外,您的类仍然会有一个普通的复制构造函数。