Что такое одиночная и двойная отправка?

Я написал шаблон для посетителей следующим образом, но я не понимаю, что такое одиночная и двойная отправка. 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, а вторая отправка происходит на объекте, который вызывает метод посещения.

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос