C++;型式检验 我有C++类: Class farm { ... protected: vector<ff_node*> workers; }; //ff_node an abstract method representing a single thread class ff_node { protected: //svc is the method to encapsulate a sequential function void* svc(void *)=0;

C++;型式检验 我有C++类: Class farm { ... protected: vector<ff_node*> workers; }; //ff_node an abstract method representing a single thread class ff_node { protected: //svc is the method to encapsulate a sequential function void* svc(void *)=0;,c++,reflection,rtti,C++,Reflection,Rtti,类ff_节点是抽象的。为了再添加一个worker,我需要创建一个与其他worker类型相同的新实例(所有worker的类型都相同) 有没有办法获取(其中一个)特定类型的worker并创建该类型的实例 你提供的信息很少,所以我猜测你到底想要什么。假设有一个抽象(纯虚拟)类 您需要使用几个多态性来使用几个不同的worker。然后最好将它们保存在唯一的向量中,这样在向量的范围结束时,工作人员将自动删除d。您可以通过直接从用户提供的参数构造新的辅助进程来添加它。由于在定义农场时甚至可能不知道新工人的类型

类ff_节点是抽象的。为了再添加一个worker,我需要创建一个与其他worker类型相同的新实例(所有worker的类型都相同)
有没有办法获取(其中一个)特定类型的worker并创建该类型的实例

你提供的信息很少,所以我猜测你到底想要什么。假设有一个抽象(纯虚拟)类

您需要使用几个多态性来使用几个不同的worker。然后最好将它们保存在
唯一的
向量中,这样在
向量的范围结束时,工作人员将自动
删除
d。您可以通过直接从用户提供的参数构造新的辅助进程来添加它。由于在定义
农场时甚至可能不知道新工人的类型
,因此必须以
模板
的形式提供此功能。比如说

class farm
{
  std::vector<std::unique_ptr<worker>> workers; //
public:
  // constructs new worker of type Worker with arguments provided
  template<typename Worker, typename... Args>
  void add_worker(Args&&...args)
  { workers.emplace_back(new Worker(std::forward<Args>(args)...)); }
};
类场
{
病媒工作者//
公众:
//使用提供的参数构造worker类型的新worker
模板
void add_worker(Args&&…Args)
{workers.emplace_back(新Worker(std::forward(args)…);}
};
像这样使用它

struct builder : public worker
{
  builder(string const&, const widget*, some_type);
  /* ... */
};

farm the_farm;
widget w( /* ... */ );
some_type x;
the_farm.add<builder>("the new builder", &w, x);
结构生成器:公共工作者 { 生成器(字符串常量,常量小部件*,某些类型); /* ... */ }; 农场;; 小部件w(/*…*/); 某些类型的x; _farm.add(“新构建者”&w,x);

请注意,在对
farm::add()
的调用中,仅必须提供第一个模板参数,其他参数将从函数参数推导而来。

在基类中创建纯虚拟克隆函数,并在每个派生类中重写它

class ff_node
{
 public:
 virtual ff_node* clone() = 0;
};

class ff_child : public ff_node
{
 public:
 ff_node* clone() override {new ff_child;}
};

现在,给定一个
ff_node*node
,您可以通过调用
node->clone()

来创建相同运行时类型的另一个实例。请提供更多信息。似乎
ff_节点
不是一个抽象类(因为您可以
新建ff_节点();
),但如果有
审查者
,则毫无意义。特定类型的
工作者
向量
。你到底希望完成什么?
struct builder : public worker
{
  builder(string const&, const widget*, some_type);
  /* ... */
};

farm the_farm;
widget w( /* ... */ );
some_type x;
the_farm.add<builder>("the new builder", &w, x);
class ff_node
{
 public:
 virtual ff_node* clone() = 0;
};

class ff_child : public ff_node
{
 public:
 ff_node* clone() override {new ff_child;}
};