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)
提前致谢..
这在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)
| 归档时间: |
|
| 查看次数: |
1911 次 |
| 最近记录: |