如何导出std :: vector?

时间:2018-07-05 15:02:32

标签: c++11 vector deriving

我想为我的运算符std::vector

衍生自[]的类
template<class T>
class MyVector : public std::vector<T>
{
public:
    // ?...

    const T &operator[](size_t index) const
        {
            //...
        }

    T &operator[](size_t index)
        {
            //...
        }
};

int main()
{
    MyVector<int> myVec = { 1, 2, 3 };
    //...
}

我该如何导出所有std::vector构造函数并为C ++ 11分配运算符?

1 个答案:

答案 0 :(得分:2)

通常这是个坏主意。

首先,因为如果某人对$.get("page.aspx", function (data){ $("#id").after(data);}) 如此愚蠢,然后将其存储在new MyVector<int>中,然后通过该指针删除,则您拥有UB。但这是一个非常愚蠢的用例。在std::vector<int>上使用new确实是不好的代码味道。

第二,因为它似乎毫无意义且令人困惑。

但是你可以做到。

std::vector

现在,此支持template<class T> class MyVector : public std::vector<T> { public: using std::vector<T>::vector; using std::vector<T>::operator=; MyVector(MyVector const&)=default; MyVector(MyVector &&)=default; MyVector& operator=(MyVector const&)=default; MyVector& operator=(MyVector &&)=default; const T &operator[](size_t index) const { //... } T &operator[](size_t index) { //... } }; 中的构建。

std::vector<T>

涵盖了一些最后的情况。

这不是完全透明的,但涵盖了99.9%的案件。