Forward declarations
-
Da viele Libraries von Boost Header-only sind sollte ich diese nicht mehr in den Header-Files unseres Projektes includieren (unnötig hohe Compilezeit). Stattdessen verwende ich Forwards declarations:
#ifndef PARSER_H_ #define PARSER_H_ // Includes #include <string> // Forward declarations struct Info; template class boost::unordered_map<std::string, CRCInfo>; template class boost::unordered_map<std::string, boost::unordered_map<std::string, std::string> >; // Functions extern bool AnalyzeLog( const std::string& filename, boost::unordered_map<std::string, Info>* indexed_by_filename, const boost::unordered_map<std::string, boost::unordered_map<std::string, std::string> >& sections); #endif // PARSER_H_Ist es auch möglich und sinnvoll <string> forward zu deklarieren und "alle" Includes in die Source Files zu verschieben?

-
Die STL ist mit sehr hoher Wahrscheinlichkeit bereits mit diesem Konzept realisiert. Insofern ist dein Vorhaben nicht sinnvll und außerdem wäre der Aufwand viel zu groß.
-
hjkhjk schrieb:
Die STL ist mit sehr hoher Wahrscheinlichkeit bereits mit diesem Konzept realisiert. Insofern ist dein Vorhaben nicht sinnvll und außerdem wäre der Aufwand viel zu groß.
OK, aber die geplanten Vorwärtsdeklarationen bei der Verwendung von Boost Libraries (Header-only) sind schon sinnvoll?
-
Tomahawk schrieb:
OK, aber die geplanten Vorwärtsdeklarationen bei der Verwendung von Boost Libraries (Header-only) sind schon sinnvoll?
Das Problem ist halt, dass Vorwärtsdeklarationen nicht mit typedefs (namespace std{class string;} ist z.B. falsch) u.ä. funktionieren. Eigentlich immer sind Header, die auf fwd enden, besser. In deinem Beispiel wäre das boost/unordered/unordered_map_fwd.hpp.
Es gibt solche auch in der Standardbibliothek, iosfwd ist so ein Beispiel.
-
genau dafür sind doch vorkompilierte header...