RazorX hat geschrieben:Als Beispiel du schreibst eine GameEngine und der Anwender soll nicht zwangsläufig das DX SDK installieren müssen.
Dann muss die Engine aber vorkompiliert ausgeliefert werden. Und wenn das passiert, kannst du dasselble durch eine abstrakte Schnittstelle realisieren.
Ich benutze Pimpl aus Trotz nicht – weil das was ist, was die Sprache machen sollte und nicht der Programmierer. Bloß, weil die Trennung zwischen öffentlicher Deklaration und privater Implementierung in C++ ein riesiger Haufen
Dinoscheiße ist, werde ich nicht meine Programmstruktur um eine Indirektion pro Objekt verkomplizieren.
Es gab mal eine Zeit (lange lange her), in der ich die Implementierung getrennt habe, indem die Objektdeklaration nur ein
unsigned char-Array von der Größe der tatsächlichen Implementierung gekriegt hat. Das war aber von Hand quasi unwartbar und zu debuggen eine Qual. Pimpl ist da die deutlich einfachere Alternative – zumindest für den Programmierer; nicht für den Compiler.
Ich mache mir übrigens schon lange keine Gedanken mehr darüber, Implementierungen geheimzuhalten. Meine Kompilierzeit liegt dank Bruch mit der C-Laufzeitbibliothek und allen APIs knapp über einer Sekunde; einfach alle abhängigen
.cpps und
.hpps ins Projekt zu schmeißen ist schneller als erst statische Bibliotheken aufzubauen; davon, meine genialen Algorithmen geheim zu halten, habe ich nichts. Außerdem ist die Hälfte meiner Objekte POD; da gibt es nicht viel zu verstecken.