一个派生类的高效交换方法

3
这是一个自解释的代码片段。谢谢!
class Foo : private std::vector<int>
{
public:
    void swap(Foo& x)
    {
        std::swap(bar, x.bar);
        // what goes here?
    }
private:
    int bar;
};
1个回答

9
std::vector<int>::swap(x);

但是,你不应该从vector继承。

由于注入类名,这可以重写为

vector::swap(x);

3
私有继承 vector 没有问题。 - Steve Jessop
我的错误,我没有看到“private”。 - Andrea Bergia
1
无论如何,通常有比私有继承更好的设计技巧。拥有一个类型为vector<int>的成员变量可能是更好的选择。 - Andrea Bergia
1
@Andrea Bergia:这完全取决于你想要提供什么。虽然我从未使用过私有继承,但我曾看到它被用于派生类提供容器功能的子集和一些额外操作的情况。聚合需要你将每个操作实现为转发调用,而在私有继承的情况下,你可以使用using指令(using base_t::push_back;--使用typedef方便起见)来重新声明它们。 - David Rodríguez - dribeas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接