复制和交换习惯用法,具有继承性

发布于 2024-12-06 03:15:08 字数 441 浏览 0 评论 0 原文

我读到了关于复制和交换习语的有趣的事情。我的问题是关于从另一个类继承时交换方法的实现。

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 ???
    }
    .../...
};

I read interesting things about the copy-and-swap idiom. My question is concerning the implementation of the swap method when inheriting from another class.

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

固执像三岁 2024-12-13 03:15:08

您将交换子对象:

swap(static_cast<Bar&>(a), static_cast<Bar&>(b));

如果 std::swap 不能完成这项工作,您可能需要为 Bar 实现交换函数。另请注意,swap 应该是非成员(如果需要,也可以是朋友)。

You would swap the subobjects:

swap(static_cast<Bar&>(a), static_cast<Bar&>(b));

You may need to implement the swap function for Bar, if std::swap doesn't do the job. Also note that swap should be a non-member (and a friend if necessary).

哆兒滾 2024-12-13 03:15:08

只需将其转换为基数并让编译器计算出来即可:

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));

合约呢 2024-12-13 03:15:08

你通常会这样做:

class Foo : public Bar
{
    int _m1;
    string _m2;
    .../...
public:
    void swap(Foo &b)
    {
         using std::swap;

         swap(_m1, b._m1);
         swap(_m2, b._m2);
         Bar::swap(b);
    }
    .../...
};

You would typically be doing it like this:

class Foo : public Bar
{
    int _m1;
    string _m2;
    .../...
public:
    void swap(Foo &b)
    {
         using std::swap;

         swap(_m1, b._m1);
         swap(_m2, b._m2);
         Bar::swap(b);
    }
    .../...
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文