如何在临时容器类中实现复制构造函数和赋值运算符?

时间:2019-06-18 14:38:10

标签: c++

我不知道如何在副本构造函数或赋值构造函数中将int转换为double。 可能吗?怎么做?

template <typename T>
class Container {
public:
    Container() { //... }
    Container(const Container& y) { //... }
    Container& operator=(const Container& y) { //... }
    ~Container() { //... }
private:
    // ...
};

int main() {
    Container<int> ci;
    Container<double> cd;
    ci = cd;
}
no match for 'operator=' (operand types are 'Container<double>' and 'Container<int>')

candidate: Container<T>& Container<T>::operator=(const Container<T>&) [with T = double]

1 个答案:

答案 0 :(得分:6)

对于您的Container模板,类定义内的所有普通Container实例均等于Container<T>。因此,对于模板参数int,所有Container都等于Container<int>。这意味着您的operator=重载仅接受一个Container<int>参数。您拥有的赋值运算符声明等于

Container<T>& operator=(const Container<T>& y);

int模板参数将是

Container<int>& operator=(const Container<int>& y);

如果您希望能够接受其他类型作为参数,则需要自己制作重载的运算符模板:

template<typename U>
Container& operator=(const Container<U>& y);
//                                  ^^^
//  Note use of new template argument here