Есть много 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));