C++ C++;基于共享的ptr派生类重载函数
有很多类似的问题,但我找不到确切的答案。如果这是重复的,我很抱歉 我有一个C++ C++;基于共享的ptr派生类重载函数,c++,inheritance,polymorphism,overloading,shared-ptr,C++,Inheritance,Polymorphism,Overloading,Shared Ptr,有很多类似的问题,但我找不到确切的答案。如果这是重复的,我很抱歉 我有一个父类和两个从中继承的派生类: class Son : public Parent { ... }; class Daughter : public Parent { ... }; 然后我向基类声明两个shared_ptr,并使用shared_ptr向每个派生类实例化它们: shared_ptr<Parent> son = shared_ptr<Son>(new Son()); shared_ptr
父类和两个从中继承的派生类:
class Son : public Parent { ... };
class Daughter : public Parent { ... };
然后我向基类声明两个shared_ptr
,并使用shared_ptr
向每个派生类实例化它们:
shared_ptr<Parent> son = shared_ptr<Son>(new Son());
shared_ptr<Parent> daughter = shared_ptr<Daughter>(new Daughter());
shared_ptr-son=shared_ptr(new-son());
共享子元素=共享子元素(新子元素());
最后,我希望有一个类,它根据它指向的派生类处理shared\ptr
。问题是,我能否使用函数重载来实现此效果:
class Director {
public:
void process(shared_ptr<Son> son);
void process(shared_ptr<Daughter> daughter);
...
};
班主任{
公众:
作废流程(共享的文件);
作废流程(共享子项);
...
};
因此,我希望能够编写以下代码:
shared_ptr<Parent> son = shared_ptr<Son>(new Son());
shared_ptr<Parent> daughter = shared_ptr<Daughter>(new Daughter());
Director director;
director.process(son);
director.process(daughter);
shared_ptr-son=shared_ptr(new-son());
共享子元素=共享子元素(新子元素());
董事;
程序主任(儿子);
程序主任(女儿);
现在我不得不这样做(我想避免):
director.process_-son(boost::shared_-polymorphic_-downcast(son));
处理子对象(boost::shared\u多态子对象(downcast));
这样的重载是不可能的,您需要一个switch语句来在控制器上的一个方法中实现类似的分派
也许您应该将process()
方法移动到父类
类(并在子类
和子类
中重写它),通过这种方式,您可以使用普通的虚拟函数解析来调用正确的函数。我不确定是否有更好的方法,因此我通常使用访问者模式或类似的双重分派技巧来满足这种需要
您的对象可能不知道自己的共享\u ptr,但通常简单的引用就足够了 理想情况下,父级
将提供足够丰富的接口,以便控制器
正确处理每个子级,而无需知道它是哪个子级
class Director {
public:
void process(shared_ptr<Parent> obj);
};
班主任{
公众:
作废流程(共享的ptr obj);
};
如果由于某种原因无法实现,则有许多设计选项。如上所述,您可以将流程与子类链接在一起。例如,如果这不符合您的需要,您可以将流程与主管隔离:
class ProcessSon: public Process, private Son {
public:
void SpecificProc1(shared_ptr<Parent> obj) {
// Make this part of the process based on class Son
}
void SpecificProc2(shared_ptr<Parent> obj) {
// Make this part of the process based on class Son
}
...
};
类进程子:公共进程,私有进程子{
公众:
void SpecificProc1(共享对象){
//使这部分流程基于类Son
}
void SpecificProc2(共享对象){
//使这部分流程基于类Son
}
...
};
对子对象执行类似的操作,并将相应的过程
与指向类的指针一起发送到控制器
的过程
方法
class ProcessSon: public Process, private Son {
public:
void SpecificProc1(shared_ptr<Parent> obj) {
// Make this part of the process based on class Son
}
void SpecificProc2(shared_ptr<Parent> obj) {
// Make this part of the process based on class Son
}
...
};