PImpl(private implementation) 其主要作用是解開類的使用接口和實現的耦合。
一個很簡單的實現如下:
頭文件中:
1 class CSample
2 {
3 private:
4 class CImpl;
5 shared_ptr<CImpl> mp;
6
7 public:
8 CSample();
9
10 void print();
11 };
實現文件中:
1 class CSample::CImpl
2 {
3 public:
4 void doPrint()
5 {
6 cout << "impl print" << endl;
7 }
8 };
9
10 CSample::CSample() : mp(new CImpl)
11 {}
12
13 void CSample::print() { mp->doPrint(); }
類CSample僅向外界暴露了最小的接口,真正的實現由其內部類CImpl來完成。這樣無論CImpl如何修改,外界對此一無所知,從而保持接口的不變性。這種方式的另外一個好處是減少了頭文件之間的依賴關系。
上面的代碼里,我使用了boost的shared_ptr來管理指針,簡化代碼。
關于PImpl的更多資料和信息可以參考如下鏈接:
1.
PImp的原理2.
PImpl your C++ code3.
the C++ PImpl