我有这样的代码,编译和按预期工作:如何获得这个编译?
class Right
{};
class Left
{
public:
Left& operator = (Right const&)
{
//... Do something ...
return *this;
}
};
int main()
{
Right right;
Left left;
// Assign individual object -- this works
left = right;
}
但现在,这个让我吃惊,我以为模板将工作本身了,因为我已经提供的= operator()
到Left
类。
int main()
{
...
std::list<Right> rightLst;
std::list<Left> leftLst;
// Assign a list of objects -- this doesn't compile
leftLst = rightLst;
}
我能做些什么,这样我可以转换rightLst
到leftLst
转换在单行?
另外,如果在左侧使用显式关键字会怎么样?然后没有提出的解决方案将工作,也就是说,如果左定义为:
class Left
{
public:
Left()
{}
explicit Left(Right const& right_)
{
.. // Do something ..
}
Left& operator = (Right const& right_)
{
// .. Do something ..
return *this;
}
};
看,我尽量避免写下面这段代码来实现我想做的事:
for(std::list<Right>::iterator it = rightLst.begin();
it != rightLst.end();
it++)
{
leftLst.push_back(Left(*it));
}
我可以重新使用STL的哪些代码替换上述内容?
@interjay - 你能解释一下上面的代码不起作用吗? (这是OP的实际问题)。另外,对于STL新手来说,为什么你的解决方案应该被实际使用。谢谢! – DVK
如果将Left拷贝构造函数声明为explicit,该怎么办? – sivabudh
这两个列表是不同类型的[列表和列表],并且没有赋值运算符来连接这两个列表。 –