我正在尝试为两个不同的模板类重载赋值运算符,但使用相同的模板类型:
template <class DataType> class Foo
{
public: Foo<data_type>& operator=(Bar<data_type> const &bar);
};
template <class DataType> class Bar
{
public: Bar<data_type>& operator=(Foo<data_type> const &foo);
};
然而,当我尝试:
Foo<int> a;
Bar<int> b = a;
我收到错误:
没有可行的转换'Foo&lt; int&gt;'到'Bar&lt; int&gt;'。
我如何实现这一目标?
答案 0 :(得分:1)
转换是通过复制构造函数完成的,而不是赋值运算符。所以你想实现:
Bar(const Foo<data_type>& foo);
答案 1 :(得分:1)
当你写:
Bar<int> b = a; // ERROR! No viable user-defined conversion sequence
您正在从对象b
复制初始化对象a
。尽管使用了a
符号, 与将对象b
分配给已构建的对象=
相同
通过复制初始化,编译器必须查找用户定义的转换序列,该序列可以将a
转换为Bar<int>
类型的对象,b
最终可以从中复制 - 构建或移动构造。
Foo<int> a;
Bar<int> b;
b = a; // OK