大佬教程收集整理的这篇文章主要介绍了C双重调度“可扩展”没有RTTI,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
std::map<std::pair<std::type_index,std::type_index>,void (*)(Base const& lhs,Base const& rhs)> dispatchMap;
(根据需要调整函数签名.)您还必须实现n ^ 2函数,和
将它们插入dispatchMap. (我假设你使用免费功能;没有
将它们放入其中一个类而不是另一个类的逻辑原因.)之后,您调用:
(*dispatchMap[std::make_pair( std::type_index( typEID( obj1 ) ),std::type_index( typEID( obj2 ) )])( obj1,obj2 );
(你显然想把它包装成一个函数;它不是你想分散的东西
遍布代码.)
一个小变体就是说只有某些组合是合法的.在这种情况下,您可以使用
在dispatchMap上找到,如果找不到要查找的内容,则会生成错误.
(期待很多错误.)如果您可以定义某种默认值,则可以使用相同的解决方案
行为.
如果你想100%正确地完成它,一些函数能够处理中间类
和它的所有衍生物,你需要某种更动态的搜索,并订购
控制重载分辨率.考虑例如:
Base / \ / \ I1 I2 / \ / \ / \ / \ D1a D1b D2a D2b
如果你有f(I1,D2a)和f(D1a,I2),应选择哪一个.最简单的解决方案
只是一个线性搜索,选择可以调用的第一个(由dynamic_cast确定)
指向对象的指针),并手动管理插入顺序以定义重载
你希望的决议.但是,使用N ^ 2个函数,这可能会很快变慢.以来
有一个排序,应该可以使用std :: map,但是排序函数会去
实际上是非常重要的(并且仍然必须在整个过程中使用dynamic_cast)
地点).
考虑到所有事情,我的建议是将双重调度限制在小的,封闭的层次结构中,并坚持访客模式的一些变体.
以上是大佬教程为你收集整理的C双重调度“可扩展”没有RTTI全部内容,希望文章能够帮你解决C双重调度“可扩展”没有RTTI所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。