所以我正在做一个个人项目(试图在 C++ 方面做得更好),并且我正在努力让它工作:
我有一个 ABC 类 使用纯虚函数 interactWith(A* target);
然后我有两个派生类,B 类和 C 类。
但是,B 类与 C 类的交互必须不同于与另一个 B 类的交互
我在 ABC 中找到了一种使用 if/else 和虚拟 getType() 的方法,但我很好奇是否有更优雅的方法,或者我是否只是在做一些非常愚蠢的事情,如果我我正在做一些愚蠢的事情(这是很有可能的),我应该从哪里开始寻找更好的解决方案(即更合适的设计模式)
请注意:我没有使用 boost,我宁愿暂时避免使用它,等我真正擅长编程时再开始学习它
我们欢迎您提供任何帮助。请和谢谢
有一点我应该注意:类 B 和 C 将(应该)只能通过 A* 可见
最佳答案
您要实现的是 double dispatch : 一个对于两个对象表现为虚拟的函数。
有几种方法可以实现它,最常见的一种是使用 visitor pattern。 .
Scott Meyers 有一个关于实现双重分派(dispatch)的精彩章节(他的 "More Effective C++" 书中的第 31 项)。他从访问者模式的讨论开始,然后用 RTTI 进行了一个非常好的实现。 .
关于C++ 继承和确定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10924100/