【发布时间】:2011-09-05 02:43:18
【问题描述】:
有很多与此类似的 SO 问题,但我无法准确找到我正在寻找的内容。如果这是重复的,我很抱歉。
我有一个Parent 类和两个继承自它的派生类:
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<Parent>。我可以使用函数重载来实现这个效果是个问题:
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);
现在我不得不做(我想避免):
director.process_son(boost::shared_polymorphic_downcast<Son>(son));
director.process_daughter(boost::shared_polymorphic_downcast<Daughter>(daughter));
【问题讨论】:
标签: c++ inheritance polymorphism overloading shared-ptr