的PIMPL Idiom(指針實現)是用於執行隱藏在其中一個公共類包裝的結構或類,可以不在庫的公共類是的一部分外部看到的技術。
這隱藏了庫的用戶的內部實現細節和數據。
實現此習語時,爲什麼要將公共方法放在pimpl類而不是公共類上,因爲公共類方法實現將編譯到庫中,而用戶只有頭文件?
爲了說明這段代碼,我們將Purr()
實現放在impl類上,並將其包裝。
爲什麼不直接在公共課上實施Purr?
// header file:
class Cat {
private:
class CatImpl; // Not defined here
CatImpl *cat_; // Handle
public:
Cat(); // Constructor
~Cat(); // Destructor
// Other operations...
Purr();
};
// CPP file:
#include "cat.h"
class Cat::CatImpl {
Purr();
... // The actual implementation can be anything
};
Cat::Cat() {
cat_ = new CatImpl;
}
Cat::~Cat() {
delete cat_;
}
Cat::Purr(){ cat_->Purr(); }
CatImpl::Purr(){
printf("purrrrrr");
}
因爲PIMP習語應該避免嗎?.. – mlvljr 2010-10-07 21:31:23
優秀的答案,我發現這個鏈接也包含全面的信息以及:http://marcmutz.wordpress.com/translated-articles/pimp-my-pimpl/ – zhanxw 2013-02-18 14:24:46
如果你想要做維護編碼器來幫助你,請記住這是一個**接口**模式。不要將它用於每個內部課堂。引用刀鋒亞軍,我見過你們不會相信的事情。 – DevSolar 2013-03-11 14:24:39