我有更多的 Java 背景,因此让我用一个 Java 示例来说明。假设存在以下代码:
interface iFoo {
/* Do foo */
void foo();
/* Do bar */
void bar();
}
class A implements iFoo {
void foo() {};
void bar() {};
}
class B<iFoo> {
iFoo foo;
B() {
foo.foo();
foo.bar();
}
}
//somewhere in the code:
B b = new B<A>();
现在如果我想实现一个可以用作B的类型参数的类C,我知道C必须实现iFoo。因此,我去了那里,按照按合同设计的约定,所有必要的文档都在那里(我需要实现哪些方法,有什么签名和内联文档。
在 C++ 中,它看起来像这样(如果我错了,请纠正我):
class A {
public:
void foo();
void bar();
}
template<class T>
class B {
public:
T foo;
B() {
foo.foo();
foo.bar();
}
}
//somewhere in the code:
B *b = new B<A>();
记录 B 对 T 的期望的最佳位置在哪里?或者反过来,如果我有 A 和 B,并且想要实现一个作为类型参数传递给 B 的类 C,我如何找出 B 对 T 的期望?上面当然是一个非常琐碎的例子,想象一下更大更复杂的类。