有很多類似這樣的SO問題,但我找不到我正在尋找什麼。如果這是重複的,我很抱歉。C++重載函數基於shared_ptr派生類
我有一個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));