У меня есть следующий код:
class A{};
class B: public A{};
class C: public A{};
class MyVisitor
{
public:
void visit(B*);
void visit(C*);
};
И затем коллекция объектов A *, я хочу добиться следующего:
1)
MyVisitor visitor;
for(vector<A*>::iterator it = vec.begin(); it!= vec.end();it++)
visitor->visit(a);
2) Как-то определить во время компиляции, указывает ли A * на производный объект D, и дать ошибку компилятора, если функция MyVisitor::visit(D*)
отсутствует
Я знаю, что 1) достижимо с некоторой реализацией мультиметодов, я думаю, я могу найти некоторые реализации мультиметодов для С++. Но возможно ли 2) как-то?
accept
в иерархии для Visitor_pattern. - person Jarod42   schedule 29.08.2014