在C++中,存在这样一个令人烦恼的现象
假设
1 | //Test.h |
编译完成后,如果我们修改了Test Class
的内容,那么我们需要把所有文件再次编译,因为我们修改了Test.h
的内容,而Test.h
正好被main.cpp
所包含
既然如此,那么有没有办法让我们就算改变了实现也只用编译单个文件然后重新链接即可的方法呢?
1.Pimpl
这个方法使用的是公有接口,私有实现,在私有成员中定义一个handle class
,用来实现各种方法
例如下面的在T1 Class
中声明一个T1Impl
作为handle class
,T1
所提供的是接口,T1Imple
提供的实现
接下来,只需要在T1
的接口中调用方法即可
1 |
|
t1.h
,t1.cpp
1 | //t1.h |
t1impl.h
,t1impl.cpp
1 | //t1impl.h |
最后当然是makefile
展示编译和连接步骤
1 | all: main.o t1.o t1impl.o |
当实现改变的时候,只需重新编译t1impl
和重新连接即可,当然如果是接口改变,自然要重新编译整个工程
2.Interface class
在C++中我们可以使用纯虚函数提供接口功能,其实解决的方法都差不多,都是使用中间层,只不过要提供一个工厂方法
1 | class T1 |