Есть много вопросов по SO, которые похожи на этот, но я не смог найти точно то, что я искал. Извините, если это дубликат.
У меня есть Parent
class и два производных класса, которые наследуются от него:
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
, основываясь на том, на какой из производных классов он указывает. Могу ли я использовать перегрузку функций для достижения этого эффекта - вопрос:
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));