私はビジターパターンを次のように書きましたが、シングルディスパッチとダブルディスパッチが何であるかわかりません。AFAIK、シングルディスパッチは呼び出し元のタイプに基づいてメソッドを呼び出しますが、ダブルディスパッチは呼び出し元のタイプと引数のタイプに基づいてメソッドを呼び出します。
ダブルディスパッチはシングルクラス階層で発生すると思いますが、ビジタークラスに2つのクラス階層があるのに、それでもダブルディスパッチと見なされるのはなぜですか。
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番目のディスパッチはvisitメソッドを呼び出すオブジェクトで発生します。
ありがとう。