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