これに似たSOの質問がたくさんありますが、私が探していたものを正確に見つけることができませんでした。これが重複している場合は申し訳ありません。
私はParent
クラスとそれを継承する2つの派生クラスを持っています:
class Son : public Parent { ... };
class Daughter : public Parent { ... };
次に、2つのshared_ptr
をBaseクラスに宣言し、それぞれの派生クラスに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));