如何根据模板类型拥有对象向量



我有一个模板类C,它应该包含一个具有E对象的向量。vector中的E对象将存储与模板相同的类型。所以如果C对象是int类型的,向量应该包含E个包含int的对象,如果C有double,那么E应该存储一个double,等等。代码看起来像这样:

template<class T> class C {
public:
    class E {
    private:
        T value;    //if C has type int then the events should store int
        std::string description;
    public:
        Event(std::string desc, T val) {
            this->description = desc;
            this->value = val;
        }
    };
    C();
    virtual ~C();
    bool add_e (std::string description);
private:
    T c_value;
    std::vector<E> c_vector; //this should look somewhat like [E<int>, E<int>, E<int>]
};

这个可以编译,但是当我尝试像这样在C.cpp文件中向c_vector添加元素时:

template<class T>
bool C<T>::add_e(std::string description) {
    c_vector.add(E(description, c_value));
}

我得到错误:'class std::vector ::E, std::allocator::E>>'没有名为'add'的成员。发生了什么事?我怎样才能实现存储E对象存储相同的类型作为封闭模板类类型C?

当我尝试搜索web时,我只找到关于在vector中存储不同模板类型的信息,例如使E成为抽象类的派生类,然后将抽象类指针存储在vector中,但我希望所有元素都包含相同的类型。

使用push_back() from std::vector

最新更新