Die Pimpl-Konvention ist eine neue C++-Technik zum Verstecken der Implementierung, Minimieren der Kopplung und Trennen von Schnittstellen.
Wie die Pimpl-Konvention den Softwareentwicklungslebenszyklus verbessert:
- Kompilierungsabhängigkeiten minimieren.
- Schnittstelle und Implementierung sind getrennt.
- Portabilität.
Ich werde nicht zu viel über weitere Pimpl-Techniken erklären. Die Hauptsache hier ist, wie man sie umsetzt. Es gibt zwei Möglichkeiten, Pimpl zu implementieren.
Der erste
durch Klassenvorwärtsdeklaration
// config.h
class ConfigPrivate;
class Config
{
private:
Config();
public:
~Config();
static Config& Instance()
{
static Config c;
return c;
}
private:
std::unique_ptr<ConfigPrivate> pimpl;
};
Beachten Sie, dass es hier als Freund deklariert wird, Config
damit der Pimpl-Zeiger auf ConfigPrivate
die privaten Mitglieder zugreifen kann.
//config.cpp
class ConfigPrivate{
public:
private:
friend Config;//声明为友元
};
Config::Config():pimpl(std::make_unique<ConfigPrivate>())
{
}
Auf diese Weise wird auch die von Qt verwendete q, d-Zeigermethode implementiert.
Der zweite Typ
Diese Methode ist für Anfänger möglicherweise nicht leicht zu verstehen.
// my_class.h
class my_class {
my_class();
private:
class impl;
std::unique_ptr<impl> pimpl;
};
// my_class.cpp
class my_class::impl {
friend my_class;
};
my_class::my_class(): pimpl( std::make_unique<impl>() )
{
}