自从写了<<Dispatcher(分派器) on run-time的思考>>之后,便决心要来一次在C++中模拟双分派。
今天真是好运气,忽然让我想到,这个问题无非就是:解决“类类型->操作器的映射”和“多个对象实例->触发操作器”,显然需要提供一些额外的“类型信息”到某个集中地。
1 有个 xxx::register<Type0, Type1>(操作器), 它注册什么样的类型组合对应哪个操作器
2 有个 xxx::go(objA, objB), 完成实例触发操作器
3 这个 xxx 类,就是“类型信息”的集中地
所以, 有关概念的命名如下:
xxx---DoubleDispatcher
操作器---Functor
Functor应该做为DoubleDispatcher的类型参数, DoubleDispatcher有一簇Functor
这里是我的代码: http://www.cppblog.com/Files/CornerZhang/DblDispatcher.zip (这份源代码有错误)
经过修复的代码:http://www.cppblog.com/Files/CornerZhang/DoubleDispatcher.zip
还不完善,暂时满足了工作上的需要,所以现在支持C++中的函数指针,而且还没有考虑类型组合对称问题.
还有许多不足之处,望感兴趣的朋友踊跃指出 :)