初始版中的DoubleDispatcher::go要求參數(shù)上對象的類型是具體類型,這是個錯誤,見諒了!
具體的看原文《醞釀了很久的雙分派器(Double Dispatcher)-- 初始版

應該是   void go(const BaseLhs& a, const BaseRhs& b) const 樣,而BaseLhs和BaseRhs在DoubleDispatcher聲明時就被約束的,所以是  DoubleDispatcher的類型參數(shù),同時MACRO CLASSID(N)要做點修正.

發(fā)布代碼經(jīng)過了改正, 這里可以直接下載.
 url: http://m.shnenglu.com/Files/CornerZhang/DoubleDispatcher.zip



summery:
  在C++里根本無法實現(xiàn)真正意義上的雙分派,只能靠引入附加的類型信息來模擬,這里所說的模擬其實是三個類型當作兩個用,看看Dispatcher::go(BaseLhs& a, BaseRhs& b)就發(fā)現(xiàn)多出了類型Dispatcher和一個綁定名稱go就明白了,非常的不同于obj->foo().
  它的優(yōu)缺點可以看: 《Modern C++ Design》的第11章,還有GoF的Visitor模式介紹時也提到過.

就我所知道的應用領域:
  . 物理系統(tǒng)中的物物碰撞
  . 分布式計算系統(tǒng)中的多重計算host的代理模型
  . 游戲場景管理的autocell grid式也可以用到(這個時候需要個3d數(shù)組)