Fundamentals of Ada's T'Class

半腔热情 提交于 2021-01-27 07:13:41

问题


Somewhat embarassed to ask this, but I know it's for the best. I've been programming in Ada for many years now, and understand nearly every part of the language fluently. However, I've never seemed able to wrap my head around T'Class. To borrow from others, can someone "explain it like I'm five?".

Edit: I bought it just to have, but contained within is a great description of, and example use of, T'Class; I refer to “Software Construction and Data Structures with Ada 95” by Michael B. Feldman.


回答1:


If you start with

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;

In the case of Proc, you are telling the compiler that the parameter should always be considered precisely as of type T (remember that a tagged type is always passed by reference, so the actual type could be derived from T of course, you would not lose the extra data). In particular, that means that within the body of Proc, all calls to Method will be exactly calls to P1.Method, never a call to an overriding Method.

In the case of Proc2, you are telling the compiler that you do not know the exact type statically, so it will need to insert extra code to resolve things at run time. A call to Method, within the body of Proc2, could be call to P1.Method, or to another overriding Method.

Basically: with 'Class, things are resolved at runtime.




回答2:


Well, if you were five, I would say that T'Class represents the whole family of T. By family, we mean children and grand-children and grand-grand-children.

As you're not five, it means that this special type represents every tagged type which is in the inheritance tree of T. This way, if you use this type as a parameter, you can use every parameter which has T as ancestor directly or not. For more information, you can read the wikibooks on this.



来源:https://stackoverflow.com/questions/28468799/fundamentals-of-adas-tclass

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!