虽然有点不好意思问这个问题,但我知道这是最好的。我已经使用 Ada 编程很多年了,并且几乎可以流利地理解该语言的每个部分。然而,我似乎始终无法完全理解 T'Class。借用别人的话,有人可以“像我五岁一样解释一下吗?”。
编辑:我买它只是为了拥有,但其中包含对 T'Class 的详细描述和示例使用;我参考了 Michael B. Feldman 的“Software Construction and Data Structures with Ada 95”。
如果你开始于
package P1 is
type T is tagged private;
procedure Method (Self : T);
end P1;
package P2 is
procedure Proc (Self : T); -- not a primitive
procedure Proc2 (Self : T'Class);
end P2;
在 Proc 的情况下,您告诉编译器该参数应始终被精确地视为 T 类型(请记住,标记类型始终通过引用传递,因此实际类型可以从 T 派生,当然,您不会丢失额外数据)。特别是,这意味着在 Proc 主体内,对 Method 的所有调用都将完全是对 P1.Method 的调用,而不是对重写 Method 的调用。
对于 Proc2,您告诉编译器您不知道静态的确切类型,因此需要插入额外的代码来在运行时解决问题。在 Proc2 主体内对 Method 的调用可以是对 P1.Method 或另一个重写 Method 的调用。
基本上:对于“类”,事情在运行时解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)