奇怪的重复模板模式是Jim Coplien的通用基类的名称,其实际泛型参数是派生类:
class Base<T> { ... }
class Derived: public Base<Derived> { ... }
或者在Java中,例如,Comparable和Enums:
class Foo implements Comparable<Foo> { ... }
//or
enum Bar { ... } // which is actually Bar extends Enum<Bar>
现在,这些类的类型名称依次为Derived
,Foo
和Bar
。
但我们称之为还指定派生的东西,即'派生是基础&lt;派生&gt;','Foo实现可比较&lt; Foo&gt;','栏扩展Enum&lt; Bar&gt;'。这不是类型名称,它更多。
但是那个typename-plus-derivation-name的字是什么?
答案 0 :(得分:1)
这是F-有界多态性。 F-bound是约束:
interface I<A extends I<A>>
// ^----------^
它以子类型显示为
class C extends I<C>
答案 1 :(得分:1)
在Java中,它是在language spec:
中给出的给定(可能是通用的)类声明
C<F1,...,Fn>
(n ≥ 0, C ≠ Object)
,类类型C<F1,...,Fn>
的直接超类是extends子句中给出的类型如果存在extends子句则声明C
,否则为Object
。
和
给定(可能是通用的)类声明
C<F1,...,Fn>
(n ≥ 0, C ≠ Object)
,类类型C<F1,...,Fn>
的直接超接口是在implements子句中给出的类型C
的声明,如果存在实现条款。
所以,它只是被称为直接超类或直接超级接口。没有特别的名字,因为它“好奇地反复发生”。