2016-11-05 6 views
0

Der C++ - Compiler muss Zugriff auf die Implementierung der Methoden haben, um eine Vorlagenklasse zu instanziieren. Daher müssen wir entweder die Definitionen einer Vorlage in die Header-Datei aufnehmen, die diese Vorlage deklariert, oder sie in Header-Dateien definieren. Aber ich möchte die Implementierung (Definitionen) meiner Funktionen aus vielen Gründen vor meinen Benutzern verbergen und sicherstellen, dass sie nur Zugriff auf die Funktionsdeklarationen haben. Ist dies bei der Verwendung von Vorlagen in C++ möglich?Verbergen der Definition von C++ - Vorlagenklassenelementfunktionen

Antwort

3

Dies wird normalerweise (z. B.) in Boost durchgeführt, indem eine Verzeichnishierarchie impl und detail erstellt wird.

impl haben in der Regel die implementatios für die Funktion API Mitglied ausgesetzt, während im Inneren des detail, wie Sie vielleicht schon erraten haben, die gritty Details hat, die Sie nicht wollen, zu belichten. Dieses System wird von den C++ - Entwicklern ziemlich gut verstanden.

Als Beispiel:

 
my_service.hpp 
impl/my_service.hpp 
impl/my_service.ipp (OR) 
detail/my_service.ipp 

So ist die Idee, die Header-Dateien zu teilen und die den Nutzern nur Ihre Top-Level-Header-Datei enthalten, die intern werden die anderen Dateien enthalten.

Aber niemand stoppt die Benutzer, um die impl Header-Datei als auch direkt aufzunehmen. Wenn Sie das auch vermeiden wollen, dann können Sie etwas in den Zeilen Prevent header from being included in some files, in compilation time?

tun