C++的PImpl技巧及作用
阿新 • • 發佈:2019-02-03
PImpl(private implementation) 其主要作用是解開類的使用介面和實現的耦合。
一個很簡單的實現如下:
標頭檔案中:
2 {
3 private:
4 class CImpl;
5 shared_ptr<CImpl> mp;
6 7 public:
8 CSample();
9 10 void print();
11 };
實現檔案中:
2 {
3 public:
4 void doPrint()
5 {
6 cout <<"impl print
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++ code
3. the C++ PImpl