У меня есть следующий код:C++ мультиметоды и компилировать определение времени
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) достижимо с некоторыми реализациями нескольких меток, я думаю, что я могу найти некоторые реализации мультиметодов для C++. Но 2) как-то возможно?
«multimethod» Предполагаю, вы имеете в виду полиморфный литой? Вы пришли с фонаря Clojure? –
@ Мультимедиа @SirDigbyChickenCaesar - это языковое агностическое понятие (aka multiple dispatch) – sehe
Независимо от того, нет ли способа определить (в системе типа C++, по крайней мере), независимо от того, является ли какая-либо произвольная INSTANCE класса производным или базовым классом в COMPILE раз после конкретизации. –