【发布时间】:2011-09-14 18:21:34
【问题描述】:
有谁知道在 C++ 中正确处理双重调度的方法不使用 RTTI 和 dynamic_cast 以及一个解决方案,其中类层次结构是可扩展的,即基类可以是源自进一步,其定义/实现不需要知道吗?
我怀疑没有办法,但我很高兴被证明是错误的:)
【问题讨论】:
-
编译时双重分派是否适合您? (我猜可能不会,但以防万一,有一个简单的解决方案。)
-
不是,因为它不允许可扩展性(我正在尝试编写一个库,而不仅仅是一组预定义的类)。
-
@Konrad,出于好奇,您在考虑 CRTP 吗?如果是这样,@George 是否有它不可行的原因?
-
因为我需要动态多态性。否则,它本来是完全可行的。
-
您希望不使用 RTTI 的什么?由于我们在谈论动态调度,所以 RTTI 是 的要求。如果您想要最小化手动
dynamic_casts 的数量(即避免在所有级别的每个潜在参数类型都必须有一个dynamic_cast,那可能是可行的,但如果您想避免dynamic_cast不惜一切代价,那么你需要语言的支持,然后答案很简单:你不能。
标签: c++ polymorphism overloading rtti double-dispatch