在运行时动态设置向量类
Dynamically set vector class at runtime
请允许我介绍一些背景。我有一个抽象课,Foo。
class Foo {
public:
virtual void bar() = 0;
}
我有两个从这个类继承的类。
class FooOne : public Foo {
public:
void bar();
}
和
class FooTwo : public Foo {
public:
void bar();
}
现在在一个完全不同的类中,我想在一个函数中创建一个数组,该数组可以容纳这两个类之一的实例。我遇到的问题是我无法创建具有此类动态类型的数组,可以吗?我习惯了Objective-C,我可以在其中创建一个类型为id
的对象。
理想情况下,这就是我一直在寻找的(伪代码):
void someFunction(FooType type) {
class aClass = (type == FooTypeOne ? FooOne : FooTwo);
vector<aClass> container;
// Do something with the container.
}
注意:我不能在此项目中使用 C++11。
您可以在 STL 容器中使用智能指针:
Foo* MakeFoo(FooType type)
{
switch(type)
{
case FooTypeOne :
return new FooOne();
break;
case FooTypeTwo :
return new FooTwo();
break;
default:
break;
}
return null;
}
void someFunction(FooType type)
{
std::vector<std::shared_ptr<Foo> > container;
std::shared_ptr<Foo> f_ptr(MakeFoo(type));
container.push_back(f_ptr);
// Do something with the container.
for(std::vector<std::shared_ptr<Foo> >::iterator iter = container.begin();
iter != container.end(); iter++)
{
(*iter)->bar(); // call derived object's bar function respectively
}
}
当您使用 C++03 时,shared_ptr可在 std::tr1
注意:您需要将虚拟析构函数添加到Foo
class Foo {
public:
virtual ~Foo() {}
virtual void bar() = 0;
};
否则,如果通过指向基的指针删除派生类型的对象,则会得到未定义的行为。
我能想到的唯一简单干净的选择是模板。 即如果你想避免你所说的指针。
template <typename FooType>
void SomeFunction() {
vector<FooType> container;
// Do something with the container.
}
void SomeFunctionCaller(){
...
if(type == "FooOne")
SomeFunction<FooOne>();
else
SomeFunction<FooTwo>();
}
但它与您的设计完全不同,不确定它是否合适。
编辑:啊,如果你对智能指针没问题,那么这就是要走的路。
相关文章:
- 将特征矩阵的向量设置为0
- 将向量设置为等于 {};
- 设置负元素特征稀疏向量C++
- 如何设置一个 std::vector 与另一个,其中两个是不同类的向量?
- 空向量占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多
- 如何在 c++ 中从字符串向量设置类对象
- 设置 A=B 会以某种方式弄乱 B 吗?(所有向量)C++
- 当将向量设置为一个值时,整个向量会被覆盖
- 如何使用向量设置 OpenCV3 calcHist() 的参数
- 如何设置 "discrete_distribution" c++ 的向量
- 将向量<double>设置为wxComboBox的选择值
- 当对象包含其他对象的向量时,无法设置值
- 设置::使用数字中的引号进行向量初始化
- 如何在C++中创建一个网格,这将允许我将每个索引设置为一个向量,以便以后操作该向量,然后绘制它
- 如何在设置元素中重用向量?
- 将预定但非初始化的向量设置为另一个别名
- 将旧向量设置为等于新向量
- opencv:使用旋转和平移向量设置模型位置
- 在c++中使用向量设置联合算法
- 如何在方法中为向量设置默认值