2017-08-24 40 views
-1

奇异递归模板模式是吉姆·科普连的名字一个通用基础类,它的实际泛型参数是一个派生类:OOP命名法:在好奇的循环模板模式中完整类型名称的名称是什么?

class Base<T> { ... } 
class Derived: public Base<Derived> { ... } 

或者在Java中,例如,可比较和枚举:

class Foo implements Comparable<Foo> { ... } 
//or 
enum Bar { ... } // which is actually Bar extends Enum<Bar> 

现在,这些类别的类型名称依次为DerivedFooBar

但是我们怎么叫也指定派生的东西,那就是“派生是,一个衍生的基础< >”,“富实现可比<富>”,“酒吧扩展Enum <酒吧>”。这不是类型名称,这是更多。

但是,对于那个typename-plus-derivation-name,单词是什么?

回答

1

这是F-bound多态性。在F-界是约束:

interface I<A extends I<A>> 
//   ^----------^ 

并出现在亚型

class C extends I<C> 
1

在Java中,它给在language spec

给定一个(可能是通用)类声明C<F1,...,Fn>(n ≥ 0, C ≠ Object),直接超类类类型C<F1,...,Fn>是在扩展子句中给出的类型C的声明是否存在扩展子句,否则为Object

给定一个(可能是通用)类声明C<F1,...,Fn>(n ≥ 0, C ≠ Object),所述直接超接口类型的C<F1,...,Fn>C声明的implements子句中给出的类型的,如果实现条款存在。

所以,它只是被称为直接超类或直接超接口。没有特别的名字,因为它“奇怪地反复出现”。