Ich bin auf der Suche nach einer guten Ressource, um etwas über gutes API-Design für C ++ - Bibliotheken zu lernen, um gemeinsam genutzte Objekte / DLLs usw. zu betrachten. Es gibt viele Ressourcen zum Schreiben netter APIs, netter Klassen, Vorlagen usw. auf Quellenebene, aber kaum etwas darüber Zusammenfügen von Dingen in gemeinsam genutzten Bibliotheken und ausführbaren Dateien. Bücher wie Large-Scale C ++ Software Design von John Lakos sind interessant, aber massiv veraltet.
Was ich suche, sind Ratschläge zB zum Umgang mit Vorlagen. Mit Vorlagen in meiner API habe ich häufig Bibliothekscode in meiner ausführbaren Datei (oder einer anderen Bibliothek). Wenn ich dort einen Fehler behebe, kann ich die neue Bibliothek nicht einfach ausrollen, sondern muss alle Clients dieses Codes neu kompilieren und verteilen. (und ja, ich kenne einige Lösungen wie den Versuch, zumindest die gängigsten Versionen innerhalb der Bibliothek zu instanziieren usw.)
Ich suche auch nach anderen Vorsichtsmaßnahmen und Dingen, die ich beachten muss, um die Binärkompatibilität bei der Arbeit an C ++ - Bibliotheken zu erhalten.
Gibt es eine gute Website oder ein Buch über solche Dinge?
quelle
std::unique_ptr
ist ziemlich neues Zeug. Was genau haben Sie gedacht , war mehr geeignet zu Ihrem vorgeschlagenen API? Wie mussten Sie alle Ressourcen manuell verwalten, um beispielsweise Leckagen und doppelte Löschvorgänge praktisch zu gewährleisten? Oder die Art und Weise, wie viele Ihrer Typen einen oder zwei Buchstabennamen hatten, wodurch es unmöglich wurde, ihren Zweck zu erraten?unique_ptr
, wäre es nicht möglich, Code wie diesen zu schreiben.Antworten:
Es gibt tatsächlich ein Buch, das genau das ist, wonach Sie suchen. Passenderweise heißt es API Design for C ++. Die Website des Buches enthält den Quellcode des Buches sowie Errata .
quelle
Das ist so ziemlich unmöglich. Die einfache Tatsache ist, dass Sie manchmal den Compiler brauchen, um einen Job zu erledigen, und Sie können diese Notwendigkeit nicht einfach wegzaubern. Es gibt keine Funktion, die
std::vector
keine Nur-Header-Bibliothek erstellen kann. Der Compiler kann viele Magics zum Laufen bringen, aber Sie können sie nicht haben, ohne sie aufzurufen, und das ist eine Tatsache des Lebens.Folgendes können Sie tun: Verwenden Sie Vorlagen nicht dort, wo Sie sie nicht benötigen. Folgendes können Sie nicht tun: noch etwas.
Die einfache Tatsache ist, dass das erneute Kompilieren mit der neuen Version im Vergleich zu den Vorteilen von Leistung, Sicherheit und Funktionalität, die Sie mit statisch typisierten Bibliotheken erzielen können, keine allzu große Belastung darstellt.
quelle