条款41
编译期多态和运行期多态
显示接口和隐式接口
显示接口是由函数的签名式(也就是函数名称,参数类型,返回类型)构成。
如下,就是一个显示接口,我们了解到函数的参数,返回类型,名称等。
string fun(int i);
而对于隐式接口,就不同了,它不基于函数签名式,而是由有效的表达式来组成。
如下:
template<typename T>
void process(T& w)
{
if(w.size()>10)
{
....
}
}
在上面的例子中能得到什么信息,我们可以了解到T类型必须支持size()函数,但是其必须返回一个int类型来支持 > 操作吗? 不,无需这样子,它可以返回一个double或者其他类型,甚至是自定义类型,只要这个类型和10相比,有重载的运算符函数能够完成 > 的操作就可以了。
这就是隐式接口。