C++箴言:理解隐式接口和编译期多态

C++箴言:理解隐式接口和编译期多态,第1张

C++箴言:理解隐式接口和编译期多态,第2张

面向对象编程的世界以显式接口和运行时多态性为中心。比如给下面这个(无意义的)类。
class Widget {
public:
Widget();
virtual ~ Widget();
虚拟STD::size _ t size()const;
虚拟void normalize();
void swap(Widget & other);//参见第25项

...
};

而这个(也是无意义的)函数(function),

void do processing(Widget & w)
{
if(w . size()> 10 & & w!= someNastyWidget){
Widget temp(w);
temp . normalize();
temp . swap(w);
}
}

我们可以这样谈论数据处理中的W:

因为w被声明为Widget类型的引用,所以w必须支持Widget接口。我们可以找到这个接口(例如,Widget的。h文件)来看看它是什么样子的,所以我们称之为显式接口——它在源代码中是显式可见的。

由于Widget的一些成员函数(member function)是虚函数,W以运行时多态的形式调用这些函数:被调用的具体函数是在执行过程中根据W的动态类型确定的(参见C++箴言:千万不要重定义继承的非虚函数)。

模板和泛型编程的世界是完全不同的。在那个世界里,显式接口和运行时多态性继续存在,但它们已经不那么重要了。而是把隐式接口(implicit interfaces)和编译时多态(compile-time polymorphism)推到前面。为了理解这是什么样的情况,看一看当我们将doProcessing从函数改为函数模板时会发生什么:

模板
void do processing(T & w)
{
if(w . size()> 10 & & w!= someNastyWidget){
T temp(w);
temp . normalize();
temp . swap(w);
}
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++箴言:理解隐式接口和编译期多态

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情