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)
这样的重载是不可能的,你需要一个switch语句来实现与一个方法中的dispatch类似的东西Director.
也许你应该移动process()方法的Parent类(和覆盖它Son和Daughter),这样你可以使用正常的虚拟函数解析调用正确的.
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |