《Effective C++》41: 了解隐式接口和编译期多态
面向对象编程世界总是以显式接口(explicit interfaces)和运行期多态(runtime polymorphism)解决问题。
例如:
class Computer
{
public:
virtual void CpuRun()
{
//......
}
//...
};
Computer类的对象必定含有CpuRun()接口,它在源代码中是可见的,因此它是显式接口。
由于该函数是virtual函数,因此该函数的实现可能会出现运行期多态,也就是具体的函数实现由运行期的情况而定。
在Template及泛型编程的世界,显式接口和运行期多态的重要性降低。
在这个世界中,隐式接口(implicit interface)和编译期多态(compile-time polymorphism)更重要。
下面来看一个template函数:
template <typename T>
void DoSomething(T& arg)
{
arg.Show();
//......
}
2、由于不同的template参数具现化不同的函数模板,导致调用不同的函数,这便是编译期多态。
通常显式接口由函数签名式(也就是函数名称,参数类型,返回类型)构成。
隐式接口并不基于签名式,而是由有效表达式组成。如上面的Show().