我是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));
}
我想结合这两个不同的函数。将来,我将开发更多派生类,我正在寻找一个函数,你可以将派生类构造函数参数作为其参数。沿着
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:未解析的外部符号!我怀疑你在基类和派生类中的虚函数不是一个无效函数,必须返回一些东西?我没有在代码下面看到typedef std::tr1::shared_ptr<Base> Base_ptr_type
指针的声明,这是使用所需参数创建实例所必需的?
Base_ptr_type p1(new derived1(i));
Base_ptr_type p2(new derived2(i,i);
再次感谢,
欢呼声
答案 0 :(得分:0)
您应该使用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();
}