C++Type Erasure 学习笔记
Posted songyuc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++Type Erasure 学习笔记相关的知识,希望对你有一定的参考价值。
1 设计缘由
继承会带来大量依赖,使得在增加新接口时代价太高
使用继承来实现接口定义,会使得派生类跟基类之间、派生类跟派生类之间产生大量依赖;
其中一种现象是:如果需要给子类定义一种新的行为(method),而在基类中定义接口后,需要对所有的实现子孙类实现该抽象方法,否则无法通过编译进行调试,(C++的编译特性导致);
因为实现子类只有在给出所有抽象方法的定义后,才能被实例化;
问题举例
我们想为draw()定义一种新的行为:在绘制图形时,同时输出screen信息。
不过如果我们在基类中添加这样的虚函数:
virtual void draw(Screen &) = 0;
则此基类所有的实现子孙类都需要实现这个函数,否则就无法进行实例化;
这样是难以进行测试的,因为我们在定义新行为时,为所有类添加一个函数是很麻烦的,难以进行增量式的编写和调试;
以上是关于C++Type Erasure 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
Boost.Type_erasure:成员函数返回_self
java类型擦除(Java Type Erasure Mechanism)