我可以以某种方式从向量中复制成员类型吗



我正在编写MyVector类,它将std::vector作为私有字段。MyVector类应该提供std::vector的所有成员类型。我该如何解决这个问题?是这样复制它们的正确方法吗(但它不起作用(:

class MyVector{
private:
vector<int> numbers;
public:
using value_type = vector<int>::value_type;
using size_type = vector<int>::size_type;
using iterator = vector<int>::iterator;
using allocator_type = vector<int>::allocator_type;
using difference_type = vector<int>::difference_type;
using reference = vector<int>::reference;
using const_reference = vector<int>::const_reference;
using pointer = vector<int>::pointer;
using const_pointer = vector<int>::const_pointer;
using const_iterator = vector<int>::const_iterator;
using reverse_iterator = vector<int>::reverse_iterator;
using const_reverse_iterator = vector<int>::const_reverse_iterator;
};

没有办法做到这一点。

您可以通过公开继承std::vector的所有成员并了解如何应对虚拟析构函数的缺乏来继承它(谢谢@M.A(,也可以选择&选择你正在做的。没有其他方法可以指定要继承的成员。

但我个人的建议是不要继承std::vector。最好明确你想要什么;inherit";照你现在做的去做。我们的目标不应该是保存击键。

如果您想选择性地使用std::vector的部分,您可以始终使用私有继承,并在派生的公共接口中公开您想要的函数:

template<typename T>
class MyVector
: private std::vector<T>
{
private:
using base_type = std::vector<T>;
public:
using base_type::value_type;
using base_type::iterator;
using base_type::pointer;
using base_type::reference;
// ... etc ...
using base_type::begin;
using base_type::end;
using base_type::operator[];
// ... etc ...
};

最新更新