我有更多的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>();
Run Code Online (Sandbox Code Playgroud)
现在,如果我想实现一个可以用作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>();
Run Code Online (Sandbox Code Playgroud)
哪个是记录B对T的期望的最佳位置?或者反过来说,如果我有A和B并希望实现一个作为类型参数传递给B的类C,我如何找出B对T的期望?上面当然是一个非常简单的例子,想象一下更大更复杂的类.
在C++中,纯抽象接口类看起来像这样:
struct IFoo
{
virtual void foo() = 0;
virtual void bar() = 0;
virtual ~IFoo() {}
};
Run Code Online (Sandbox Code Playgroud)
然后你像普通的类一样继承它
class A : public IFoo
{
public:
void foo();
void bar();
};
Run Code Online (Sandbox Code Playgroud)