2016-04-16 9 views
0

Ich möchte eine dynamische/statische Bibliothek erstellen, die die SFML-Bibliothek und andere verbindet. Mein Problem ist jetzt, dass wenn ich meine Bibliothek in einem Projekt verarbeite, ich sicherstellen muss, dass die SFML includes für dieses Projekt verfügbar sind.
Kann ich diese Abhängigkeit von Headers von Drittanbietern irgendwie entfernen?
Wie wäre es mit header-only Bibliotheken?Kann ich eine C++ - Bibliothek erstellen, die eine andere Bibliothek verknüpft, aber nicht von deren Includes abhängt?

Wie andere Bibliotheken damit umgehen (wenn SFML mit, ich brauche nur ihre Header obwohl SFML auf andere Bibliotheken abhängt)

Antwort

1

Sie Ihre Header-Dateien neu zu organisieren und strukturieren Sie den Code müssen. Sie müssen zwei Sätze von Header-Dateien haben:

  • Die internen Header-Dateien, die verwendet werden Ihre Bibliothek zu bauen, und diese Header-Dateien und Referenz SFML ‚s-Header-Dateien, Klassen und Ressourcen.

  • Die öffentlichen Header-Dateien, die die Schnittstelle zu Ihrer Bibliothek bilden.

Ihre Bibliothek installiert nur das öffentliche Set. Die öffentlichen Header-Dateien enthalten keine Header-Dateien SFML, und sie verweisen nicht auf SFML Klassen.

Ihre öffentlichen Header-Dateien und -Klassen deklarieren, definieren aber keine internen Klassen und Zeiger auf sie. Die internen Klassen sind nur in Ihren eigenen internen Header-Dateien definiert.

Sie sollten einige Zeit damit verbringen, Headerdateien aus einer großen, beliebten C++ - Bibliothek zu betrachten. Sie finden oft Zeiger und andere Verweise auf interne Klassen, die nicht in den öffentlichen Header-Dateien definiert sind. Sie sind interne Klassen, die von der Bibliothek verwendet werden und nicht öffentlich zugänglich sind.

Sogar viele C-Bibliotheken sind auf diese Weise strukturiert.

+0

Danke für die schnelle Antwort :), so würde dies mit dem gleichen Problem kommen? Ich habe eine Klasse A ('A.h' /' A.cpp'), die einen SFML-Header enthält. Ich habe jetzt 'B.h', das' A.h' enthält. Wenn ich die Bibliothek verwende und ihre 'B.h' einschließe, benötige ich noch die Header? – sro5h

+0

Ja. Wenn A.h einen SFML-Header enthält, wird es benötigt. Schreibe B.h um, so dass es A.h. Wie ich gesagt habe: schauen Sie sich an, wie andere Bibliotheken das machen. –

+0

Wenn dies nicht funktioniert, ist die einzige Möglichkeit, die Abhängigkeit von der 'SFML' zu entfernen, die 'Forward-Declaration', oder? Aber was, wenn ich ein normales 'SFML-type'-Mitglied brauche? – sro5h

Verwandte Themen