Что такое одиночная и двойная отправка?
Я написал шаблон для посетителей следующим образом, но я не понимаю, что такое одиночная и двойная отправка. AFAIK, одиночная отправка вызывает метод, основанный на типе вызывающего, где двойная отправка вызывает метод, основанный на типе вызывающего и типе аргумента.
Я предполагаю, что двойная диспетчеризация происходит в иерархии одного класса, но почему у класса посетителя есть иерархия двух классов, но она все еще рассматривается как двойная диспетчеризация.
void floppyDisk::accept(equipmentVisitor* visitor)
{
visitor->visitFloppyDisk(this);
}
void processor::accept(equipmentVisitor* visitor)
{
visitor->visitProcessor(this);
}
void computer::accept(equipmentVisitor* visitor)
{
BOOST_FOREACH(equipment* anEquip, cont)
{
anEquip->accept(visitor);
}
visitor->visitComputer(this);
}
void visitFloppyDisk(floppyDisk* );
void visitProcessor(processor* );
void visitComputer(computer* );
Пожалуйста, объясните, используя пример кода, который я предоставил.
AFAIK, первая отправка происходит на объекте, который вызывает accept, а вторая отправка происходит на объекте, который вызывает метод посещения.
Благодарю.