C ++ Vector of template class,Polymorphism

时间:2016-10-05 07:31:24

标签: c++ templates generics vector polymorphism

每次创建对象时,我都会将该对象的指针存储在向量中,该向量是对象类的静态成员,以便监视其状态,如下所示:

class A {
private:
    static std::vector<A *> as;
    STATE state = NONE; //<- enum
    void doSomething();

public:
    A() {
        as.push_back(this);
    }

    static void monitor() {
        auto end = as.end();

        for (auto obj = as.begin(); obj != end; obj++) {
            switch ((*obj)->state) {
                //process it
                (*obj)->doSomething();
            }
        }
    }
}

//// recurrent call in other part of the program or even in other thread
A::monitor();

上面的代码显然是不完整的,缺少适当的析构函数,删除了正被删除的向量的指针。

现在的问题是我必须对模板类

做同样的事情
template <typename T>
class A {            

    void doSomething(); //<--independent, no template
    ....
}

有没有办法做同样的事情?,为每个对象应用独立类型方法“doSomething()”?

如果函数“doSomething()”是依赖类型,那么有一种方法可以实现相同的目的吗?

1 个答案:

答案 0 :(得分:4)

您也可以这样做:

template <typename T>
class A {
private:
    static std::vector<A<T>*> as;
    STATE state = NONE; //<- enum
    void doSomething()

public:
    A() { as.push_back(this); }

    static void monitor() {
        auto end = as.end();

        for (auto obj = as.begin(); obj != end; obj++) {
            switch ((*obj)->state) {
                //process it
                (*obj)->doSomething();
            }
        }
    }
}

template <typename T>
std::vector<A<T>*> as;

你只需要打电话

A<MyType>::monitor();