C++基于shared_ptr派生类重载函数

Ala*_*ing 7 c++ polymorphism inheritance overloading shared-ptr

有很多与此类似的问题,但我找不到我想要的东西.如果这是重复,我很抱歉.

我有一个Parent类和两个继承自它的派生类:

class Son : public Parent { ... };
class Daughter : public Parent { ... };
Run Code Online (Sandbox Code Playgroud)

然后我shared_ptr向Base类声明两个,并使用a shared_ptr对每个派生类实例化它们:

shared_ptr<Parent> son = shared_ptr<Son>(new Son());
shared_ptr<Parent> daughter = shared_ptr<Daughter>(new Daughter());
Run Code Online (Sandbox Code Playgroud)

最后,我想有一个类shared_ptr<Parent>根据它指向的派生类进行处理.我可以使用函数重载来实现这个效果是个问题:

class Director {
public:
    void process(shared_ptr<Son> son);
    void process(shared_ptr<Daughter> daughter);
    ...
};
Run Code Online (Sandbox Code Playgroud)

所以我希望能够编写以下代码:

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);
Run Code Online (Sandbox Code Playgroud)

现在我必须做(我想避免):

director.process_son(boost::shared_polymorphic_downcast<Son>(son));
director.process_daughter(boost::shared_polymorphic_downcast<Daughter>(daughter));
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 7

这样的重载是不可能的,你需要一个switch语句来实现与一个方法中的dispatch类似的东西Director.

也许你应该移动process()方法的Parent类(和覆盖它SonDaughter),这样你可以使用正常的虚拟函数解析调用正确的.