【C++】Type Erasure 学习笔记

1 设计缘由

继承会带来大量依赖,使得在增加新接口时代价太高

使用继承来实现接口定义,会使得派生类跟基类之间、派生类跟派生类之间产生大量依赖;
其中一种现象是:如果需要给子类定义一种新的行为(method),而在基类中定义接口后,需要对所有的实现子孙类实现该抽象方法,否则无法通过编译进行调试,(C++的编译特性导致);
因为实现子类只有在给出所有抽象方法的定义后,才能被实例化;

问题举例

我们想为draw()定义一种新的行为:在绘制图形时,同时输出screen信息。
不过如果我们在基类中添加这样的虚函数:

virtual void draw(Screen &) = 0;

则此基类所有的实现子孙类都需要实现这个函数,否则就无法进行实例化;
这样是难以进行测试的,因为我们在定义新行为时,为所有类添加一个函数是很麻烦的,难以进行增量式的编写和调试;

你可能感兴趣的:(c++,学习,开发语言)