我是 C++ 的新手,所以请原谅原始编码技术。我正在尝试弄清楚如何创建一个函数来生成指向不同继承类的共享指针。
class base{
/*.... members ...*/};
class derived1: public base{
/*.... members ...*/
derived1(int){};
~derived1(){};
}
class derived2: public base{
/*.... members ...*/
derived2(int,int){};
~derived2(){};
}
为了创建每个派生策略的多个实例,我有两个不同的函数,它们通过共享指针手动执行此操作。
typedef std::tr1::shared_ptr<Base> Base_ptr_type;
void fn1(int i){
for (t=0;t<=no_instances1;t++)
Base_ptr_type p1(new derived1(i));
}
void fn2(int i, int j){
for (t=0;t<=no_instances2;t++)
Base_ptr_type p2(new derived1(i,j));
}
我想结合这两个不同的函数。在未来,我将开发更多的派生类,我正在寻找一个函数,你将把派生类的构造函数参数作为它的参数。Somthing along
Base_ptr_type p1(new derived1(i));
Base_ptr_type p2(new derived2(i,i);
void Global_fn(int no_instances, Base_ptr_type ptr ){ ?????? }
因此当我们应用 Global_fn(p1) 时,它会生成多个 derived1 和 Global_fn(p2) 的实例,它会根据每个派生类的构造函数参数生成多个 derived2 的实例。
提前感谢大家的帮助
谢谢伊戈尔。您的解决方案给我一个链接问题错误 LNK2001:未解析的外部符号!我怀疑你在基类和派生类中的 vitualfunction 不是 void 函数并且必须返回一些东西?我没有看到 typedef std::tr1::shared_ptr<Base> Base_ptr_type
的声明下面指向您的代码的指针,这是创建具有所需参数的实例所必需的?
Base_ptr_type p1(new derived1(i));
Base_ptr_type p2(new derived2(i,i);
再次感谢,
干杯
最佳答案
你应该使用 factory , 独立或作为 base、derived1 和 derived2 的一部分。
实现方法之一:为所有类添加重载的create_instance
函数:
class base{
public:
virtual base* create_instance() = 0;
};
class derived1: public derived1{
public:
virtual base* create_instance(); // creates derived1
};
class derived2: public base{
public:
virtual base* create_instance(); // creates derived2
};
void Global_fn(int no_instances, Base_ptr_type ptr )
{
for (int i = 0; i < no_instances; i++)
ptr->create_instance();
}
关于c++ - 通过共享指针生成不同继承类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6585555/