私は 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 に何を期待しているかを調べるにはどうすればよいでしょうか? もちろん、上記は非常に些細な例です。より大きく複雑なクラスを想像してみてください。