从现有的一次创建新的类实例?

Dav*_*d S 1 c++ vector

我有一个指向基类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)

jua*_*nza 6

一种方法是使用一个虚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>.