0

我正在尝试为两个不同的模板类但具有相同的模板类型重载赋值运算符:

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< int >' 到 'Bar< int >' 没有可行的转换。

我如何实现这一目标?

4

2 回答 2

1

转换是通过复制构造函数完成的,而不是赋值运算符。所以你想实现:

Bar(const Foo<data_type>& foo);
于 2013-04-28T19:06:19.683 回答
1

当你写:

Bar<int> b = a; // ERROR! No viable user-defined conversion sequence

您正在从 object复制初始化对象。这将object分配给已构造的 object不同,尽管使用了符号。baab=

使用复制初始化,编译器必须寻找一个用户定义的转换序列,该序列可以转换a为一个类型的对象,Bar<int>最终b可以从中复制构造或移动构造。

另一方面,分配将起作用:

Foo<int> a;
Bar<int> b;
b = a; // OK
于 2013-04-28T19:10:19.150 回答