通过共享指针生成不同继承类的实例
Generating Instances of Different Inherited Classes through Shared Pointers
我是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_filn(p2(则基于每个相应派生类的构造函数参数生成了derided2的多个例子。
感谢您在之前提供的所有帮助
谢谢你,伊戈尔。您的解决方案给了我一个链接问题错误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);
再次感谢
欢呼
您应该使用一个工厂,独立的或作为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++ 实例化新对象时不接受继承方法默认参数值
- 是否应该使用继承来减少内存消耗的实例的内存分配?
- 如何实例化从使用模板的纯虚拟类继承的对象
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 从抽象类继承的类的实例
- 获取继承的实例化模板的类型
- 无法使用多重继承 c++ 实例化抽象类
- 如何在继承级别的多个实例之间共享相同的数据
- 模板实例和继承的转换错误
- 模板类实例化如何与类继承协同工作
- Cython C 类继承无法实例化派生类
- 实例化指针从继承类函数
- 为什么不能将继承自(非模板)类 B 的实例化类模板 A 的引用转换为对 B 的引用?
- C++用于深层继承的模板单一实例基类
- 如何在不使用继承的情况下'rename'模板实例化?
- 实例化没有继承的对象时出错
- 继承——实例化问题