自從寫(xiě)了<<Dispatcher(分派器) on run-time的思考>>之后,便決心要來(lái)一次在C++中模擬雙分派。
今天真是好運(yùn)氣,忽然讓我想到,這個(gè)問(wèn)題無(wú)非就是:解決“類(lèi)類(lèi)型->操作器的映射”和“多個(gè)對(duì)象實(shí)例->觸發(fā)操作器”,顯然需要提供一些額外的“類(lèi)型信息”到某個(gè)集中地。
1 有個(gè) xxx::register<Type0, Type1>(操作器), 它注冊(cè)什么樣的類(lèi)型組合對(duì)應(yīng)哪個(gè)操作器
2 有個(gè) xxx::go(objA, objB), 完成實(shí)例觸發(fā)操作器
3 這個(gè) xxx 類(lèi),就是“類(lèi)型信息”的集中地
所以, 有關(guān)概念的命名如下:
xxx---DoubleDispatcher
操作器---Functor
Functor應(yīng)該做為DoubleDispatcher的類(lèi)型參數(shù), DoubleDispatcher有一簇Functor
這里是我的代碼: http://www.shnenglu.com/Files/CornerZhang/DblDispatcher.zip (這份源代碼有錯(cuò)誤)
經(jīng)過(guò)修復(fù)的代碼:http://www.shnenglu.com/Files/CornerZhang/DoubleDispatcher.zip
還不完善,暫時(shí)滿足了工作上的需要,所以現(xiàn)在支持C++中的函數(shù)指針,而且還沒(méi)有考慮類(lèi)型組合對(duì)稱問(wèn)題.
還有許多不足之處,望感興趣的朋友踴躍指出 :)
要更范型一點(diǎn),支持靜態(tài),成員,變參數(shù)個(gè)數(shù)函數(shù)。
謝謝!