如何覆盖STL容器函数

时间:2017-07-05 13:31:19

标签: c++ stl

有可能,使用相同的参数覆盖某个函数stl容器吗? 我希望在函数内部使用push_back覆盖if。 我尝试但是,总是有关于该功能的错误/信息在向量中。

3 个答案:

答案 0 :(得分:2)

STL容器的继承是不好的方法。该向量不应该有派生类。向量和虚拟析构函数中没有虚方法(最后一个可能会产生很多问题)。 您可以创建自己的类并使用向量作为成员。

答案 1 :(得分:2)

覆盖意味着您将继承 STL 容器。不要那样做! STL 容器不是为从它们继承而设计的。

作为一个选项,您可以将 std :: vector 封装到某个包装类中,并在推送之前执行其他功能,如:

template<typename T>
class Wrapper
{
public:
    template<typename U>
    void push(U&& e)
    {
         // some additional processing
         data.push_back(std::forward<U>(e));
    }

private:
    std::vector<T> data;
};

答案 2 :(得分:0)

你不能这样做。 std库中的大多数类都不是要继承的。但是,不要“从内部”改变它,而是“从外部”进行,例如:

template<typename T> myPush(std::vector<T>& v,T element) {
    if (someCondition()) { v.push(element); }
}

或者,你可以这样做:

struct MyCustomVector {
     void my_push( T element);
     /* pulic or private: */          // depends on what you want/need
     std::vector<T> vect;
};