复制和交换习惯用法,具有继承性
我读到了关于复制和交换习语的有趣的事情。我的问题是关于从另一个类继承时交换方法的实现。
class Foo : public Bar
{
int _m1;
string _m2;
.../...
public:
void swap(Foo &a, Foo &b)
{
using std::swap;
swap(a._m1, b._m1);
swap(a._m2, b._m2);
// what about the Bar private members ???
}
.../...
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您将交换子对象:
如果
std::swap
不能完成这项工作,您可能需要为Bar
实现交换函数。另请注意,swap
应该是非成员(如果需要,也可以是朋友)。You would swap the subobjects:
You may need to implement the swap function for
Bar
, ifstd::swap
doesn't do the job. Also note thatswap
should be a non-member (and a friend if necessary).只需将其转换为基数并让编译器计算出来即可:
swap(static_cast(a), static_cast
Just cast it up to the base and let the compiler work it out:
swap(static_cast<Bar&>(a), static_cast<Bar&)(b));
你通常会这样做:
You would typically be doing it like this: