【问题标题】:RTTI using Composition使用组合的 RTTI
【发布时间】:2013-03-26 05:17:18
【问题描述】:

据说程序员应该更喜欢组合而不是继承。我想知道是否可以使用组合轻松实现 RTTI?

【问题讨论】:

  • 合成和typeof(T)有什么关系?
  • 我说的是运行时类型识别/运行时多态性。
  • 您面临的具体情况是什么?这个问题太宽泛了——简短的回答是“是”,这有帮助吗?
  • 给我展示一个使用组合而不是继承来实现 RTTI 的示例代码。
  • RTTI 不是使用继承“实现”的。 RTTI是一种编程语言的能力。在 C# 中,使用 typeof(T).GetType() 或任何其他形式的反射。在 C++ 中,使用 typeid

标签: oop inheritance composition rtti


【解决方案1】:

我想也许我现在明白了你的问题,尽管我相信你是从错误的角度来解决这个问题的。在继承树中,您可以使用 RTTI 检查对象的类型,而没有继承树(使用组合代替)则没有必要,因为您只有一种可能的类型。然后,您可以设置属性或方法来指示对象的“类型”,尽管在真正的 OOP 中您不需要检查类型,而应该让多态来处理它。

在复合对象中,方法调用被转发给它的子对象;在继承树中,方法调用是虚拟的,由派生类处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 2013-04-22
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2019-12-08
    • 2021-08-09
    相关资源
    最近更新 更多