C++ 隐式接口与编译期多态
泛谈显示接口、运行期多态 & 隐式接口、编译期多态
显示接口 隐式接口
运行期多态 编译期多态
这两对概念刚好是成对的。
显示接口和运行期多态对于OOP来说已经司空见惯
然而隐式接口和编译期多态就有点陌生,它们是属于泛型编程GP的概念
隐式接口
基于泛型编程的基础上,对于一个模板参数,我们可以对参数对象施加的接口约束就叫做隐式接口
例如:
template<class T>
void f(T& w) {
w.func();
}
上述例子中,对w这个对象,其必须要具备func接口
因此对于传入的类型参数T而言,就不许实现func接口
这就是隐式接口
编译器多态
熟悉多态的选手肯定很容易理解,下面先看一段代码
#include <iostream>
using namespace std;
namespace pzzpl01 {
template<class T>
void f1(T& w) {
w.func();
}
class A {
public:
void func() {
cout << "A func called" << endl;
}
};
class B {
public:
void func() {
cout << "B func called" << endl;
}
};
}
int main()
{
using namespace pzzpl01;
A a;
f1(a);
B b;
f1(b);
}
可以看见func函数根据传入的模板参数不懂,调用了不同func实现
这个就是多态,但是不一样的是,它发生在编译器
因此我们称之为编译期多态。
大佬请见笑!!!