我不知道如何在副本构造函数或赋值构造函数中将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]
答案 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