C++ Перегрузка функции, основанной на shared_ptr Derived Class

Есть много вопросов по 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));
7
задан Alan Turing 30 May 2011 в 23:32
поделиться