Implementierung des C++-Pimpl-Methodencodes

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, Configdamit der Pimpl-Zeiger auf ConfigPrivatedie 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>() )
{
	
}

Pimpl für Kapselung zur Kompilierzeit (modernes C++)

Guess you like

Origin blog.csdn.net/no_say_you_know/article/details/125277832