我有一个指向基类foo的指针向量,它有几个子类,我想要做的是基于它是哪个子类,创建一个同一个实例的新类.
我之前通过一个巨大的for循环解决了它,它使用typeid找出它是什么类但是没有办法以更一般的方式解决它?
基本上,我正在寻找这样的东西:
std::vector<foo*> a;
std::vector<foo*> b;
//Store a couple of classes in a and b
b[0] = new typeid(a[0]).name();
Run Code Online (Sandbox Code Playgroud)
一种方法是使用一个虚clone()方法返回指向正确类型对象的指针:
struct base
{
virtual base* clone()=0;
virtual ~base() {}
};
struct foo : public base
{
virtual base* clone() { return new foo(*this); }
};
struct bar : public base
{
virtual base* clone() { return new bar(*this); }
};
Run Code Online (Sandbox Code Playgroud)
然后你的代码就是
b[0] = a[0].clone();
Run Code Online (Sandbox Code Playgroud)
在现实生活中的代码中,您将返回一个智能指针,例如std::unique_ptr<base>.
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |