Seite 1 von 1

[C++] Für Bibliothek innere Header maskieren

Verfasst: 20.04.2015, 11:40
von Raphael
Hallo,

ich probiere aktuell etwas mit C++ herum und habe da eine Frage, auf welche ich auch nach einer ausgiebigen Suche keine Antwort gefunden habe:

Nehmen wir mal an, ich würde eine Bibliothek "2fAddition" erstellen wollen, welche vier float-Werte entgegennimmt und intern mit dem Datenkonstrukt "Vector2f" rechnet. Für die Klasse "Vector2f" gäbe es einen Header (Vector2f.h) und eine Implementation (Vector2f.cpp). Die Fassade "2fAddition.h" würde "Vector2f.h" inkludieren und in "2fAddition.cpp" für die Berechnung benutzen. Wenn ich es nun als Bibliothek builde, müsste ich die "Vector2f.h" immer mitgeben. Wie bekomme ich es allgemein hin, dass ich nur die Fassade "2fAddition.h" als Header mitgeben muss? In diesem Beispiel könnte man das natürlich alles in die "2fAddition.cpp" packen oder so, aber ich wüsste gerne, welche Strategie da bei größeren Projekten angewendet wird. Kann man vielleicht die "internen" Header irgendwie vor den restlichen Quellcode in die Bibliothek backen lassen?

Danke ;)

Re: [C++] Für Bibliothek innere Header maskieren

Verfasst: 20.04.2015, 12:23
von Krishty
Nehmen wir mal an, ich würde eine Bibliothek "2fAddition" erstellen wollen, welche vier float-Werte entgegennimmt
    addition2f(float, float, float, float);

Du verteilst diese Zeile und die lib.
Die Fassade "2fAddition.h" würde "Vector2f.h" inkludieren
Warum würde eine Schnittstelle Interna inkludieren?!

Re: [C++] Für Bibliothek innere Header maskieren

Verfasst: 20.04.2015, 12:35
von Raphael
Und dann "Vector2f.h" in die "2fAddition.cpp" inkludieren? Die Lösung war zu einfach :D In "Vector2f.h" könnte ich dann aber wieder normal alles in den Header inkludieren, was ich an anderen Strukturen theoretisch bräuchte, oder?

Re: [C++] Für Bibliothek innere Header maskieren

Verfasst: 20.04.2015, 17:46
von Krishty
Du sollst nicht alles inkludieren, was du theoretisch bräuchtest, sondern nur, was du tatsächlich brauchst. Aber ja; möglich ist’s ;)