Wann sollte ich -inl.h Dateien verwenden?

8

Ich habe gerade diesen Artikel im Google C ++ Coding Style Guide - und ich verstehe es nicht ganz.

Wenn ich eine Inline-Methode oder -Funktion in eine andere Datei als den von anderen Dateien eingeschlossenen Header einfüge, ist dies keine Methode der Klasse. und es wird nur für Bits von Code verwendbar sein, die es enthalten. Warum also überhaupt solche -inl.h-Dateien?

Warum wollen wir überhaupt noch lange Funktionen inline machen? (d. h. anders als im Falle von Vorlagen, wenn wir den Code in die Header-Dateien zur Instanziierung einfügen müssen)

    
einpoklum 17.07.2013, 11:10
quelle

2 Antworten

7

Dies wird oft für lange Funktionsvorlagen getan. Der reguläre Header my_functions.h enthält nur die Deklarationen und die Implementierungsdatei my_functions-inl.h enthält die Implementierungen. Der Grund dafür ist, dass Funktionsvorlagen nicht in .cpp Dateien gespeichert werden können. Beachten Sie, dass die X.h-Datei die X-inl.h-Datei enthält und nicht umgekehrt.

Andere Bibliotheken haben unterschiedliche Namenskonventionen: z.B. Einige der Boost-Bibliotheken verwenden .hpp für Vorlagenheader und .ipp für Vorlagenimplementierungsdateien.

    
TemplateRex 17.07.2013, 11:21
quelle
11
  

Ich habe gerade diesen Artikel im Google C ++ - Codierungsstilführer erwähnt - und ich verstehe es nicht ganz.

Nehmen Sie diesen Leitfaden mit einer Prise Salz. Viele der Richtlinien sollen dabei helfen, mit der alten Codebasis von Google zu interagieren, und sind kein besonders guter Ratschlag für die allgemeine C ++ - Entwicklung.

  

Warum also überhaupt solche -inl.h Dateien?

Es gibt keinen besonders guten Grund; Das tue ich selbst nicht. Einige Leute mögen sie, weil sie die Menge an Material in der Haupt-Header-Datei minimieren, die die Benutzer des Headers im Allgemeinen lesen wollen, und trennt die Implementierungsdetails, die ihnen normalerweise egal sind.

  

Warum wollen wir überhaupt auch lange Funktionen inline machen?

Manchmal müssen wir: Vorlagen-Definitionen müssen in jeder Übersetzungseinheit verfügbar sein, die die Vorlage instanziiert, so dass sie (normalerweise) in Kopfzeilen sein müssen.

Manchmal möchten wir: Indem wir eine Funktion inline in einer Kopfzeile implementieren, müssen wir uns keine Gedanken darüber machen, eine separate Übersetzungseinheit dafür zu erstellen und zu verknüpfen. Dies kann die Verteilung einer Bibliothek erleichtern. möglicherweise auf Kosten von längeren Bauzeiten.

    
Mike Seymour 17.07.2013 11:22
quelle

Tags und Links