继承类类型的c ++容器

zuu*_*uuz 2 c++ inheritance containers vector

我想要一个容器(让我们说一个std :: vector)来保存各种继承类型,并实例化它们,.ie矢量类 - >对象矢量.

例如:

class A{};

class B: public class A
{};

class C: public class A
{};

void main()
{
    std::vector<of inherited A types> typesVec;
    std::vector<A*> objectsVec;

    typesVec.push_back(class B);
    typesVec.push_back(class C);

    for (int i = 0; i < typesVec.size(); i++)
    {
        A* pA = new typesVec.at(i);
        objectsVec.push_back(pA);
    }

}
Run Code Online (Sandbox Code Playgroud)

提前致谢..

Luc*_*ore 6

这在C++中是不可能的(至少不是直接).我可以看到这种情况发生在一种具有反射的语言中,但C++却没有.

您可以做的是创建工厂或简单地创建指定类型的对象的方法.

你没有一个类型的向量,而是有一个对象生成器的向量(足够接近,对吧?):

class A{};

class B: public class A
{};

class C: public class A
{};

struct AFactory
{
    virtual A* create() { return new A; }
};
struct BFactory : AFactory
{

    virtual A* create() { return new B; }
};
struct CFactory : AFactory
{

    virtual A* create() { return new C; }
};

//...

typesVec.push_back(new BFactory);
typesVec.push_back(new CFactory);

for (int i = 0; i < typesVec.size(); i++)
{
    A* pA = typesVec.at(i)->create();
    objectsVec.push_back(pA);
}
Run Code Online (Sandbox Code Playgroud)