include Häufigkeit minimieren



  • Ich handhabe so, dass alle Klassen bei mir die STL Includes mit drin stehen haben, die sie benötigen um zu funktionieren. Damit kann ich diese Klassen locker flockig in einem anderen Projekt nutzen, ohne das ich mich erst 30 Minuten durch den Quellcode wursteln muss um zu schauen, welche STL Header ich nun noch inkludieren muss.

    Ich denk mal das es auch ein Thema ist, wo man die einen hat die es so machen und die anderen machen es wieder anders. Von daher ne Glaubenssache. Das mit den Abhängigkeiten stimmt schon, wie gesagt immer dort alles bündeln wo mans braucht. Mehrfach werden die STL Header eh nicht includiert, da diese ja auch einen HeaderGuard besitzen.



  • Blackskyliner schrieb:

    Ich handhabe so, dass alle Klassen bei mir die STL Includes mit drin stehen haben, die sie benötigen um zu funktionieren.

    Wie meinst du das?



  • daersc schrieb:

    Blackskyliner schrieb:

    Ich handhabe so, dass alle Klassen bei mir die STL Includes mit drin stehen haben, die sie benötigen um zu funktionieren.

    Wie meinst du das?

    so:

    #include <vector>
    #include <string>
    
    class Weinkeller
    {
       std::vector<std::string> flaschen;
    };
    

    Und wer "Weinkeller.h" inkludiert, muß nicht vorher <string> oder <vector> inkludieren.



  • volkard schrieb:

    daersc schrieb:

    Blackskyliner schrieb:

    Ich handhabe so, dass alle Klassen bei mir die STL Includes mit drin stehen haben, die sie benötigen um zu funktionieren.

    Wie meinst du das?

    so:

    #include <vector>
    #include <string>
    
    class Weinkeller
    {
       std::vector<std::string> flaschen;
    };
    

    Und wer "Weinkeller.h" inkludiert, muß nicht vorher <string> oder <vector> inkludieren.

    Ist das nicht ohnehin die "normale" Vorgehensweise?



  • daersc schrieb:

    Ist das nicht ohnehin die "normale" Vorgehensweise?

    Und es ist deshalb die "normale" weil ebenfalls auch beste Vorgehensweise.

    Einen geheimen Trick wie es besser geht gibt es nicht.



  • Shade Of Mine schrieb:

    Einen geheimen Trick wie es besser geht gibt es nicht.

    Und ich dachte schon ich hab was wichtiges versäumt 😃



  • Shade Of Mine schrieb:

    daersc schrieb:

    Ist das nicht ohnehin die "normale" Vorgehensweise?

    Und es ist deshalb die "normale" weil ebenfalls auch beste Vorgehensweise.

    Einen geheimen Trick wie es besser geht gibt es nicht.

    Du kennst ihn nur auch nicht ^^



  • Es gibt schon Tricks (Pimpl z.B.), aber die sind auch nicht der Weisheit letzter Schluss, weil sie eben eigene Probleme mit sich bringen.

    Gerade im Falle von zentralen Standardbibliotheks-Headern wie <string> oder <vector> ist die Abhängigkeit durchaus verkraftbar.



  • pumuckl schrieb:

    bzw. ist es vielleiocht sinnvoll eine Datei nur mit includes zu schreiben und diese dann überall zu includieren? 🙂

    Nein. Damit würdest du an anderen Stellen Header einbinden die du garnicht brauchst und dadurch unnötig Abhängigkeiten zur Compilezeit schaffen.

    Zu pauschal. Eine Datei, die Header inkludiert die oft gebraucht werden und die sich nie (oder quasi nie) ändern, und die dann als Precompiled Header eibinden, bringt ordentlich Speed beim kompilieren.



  • Nukularfüsiker schrieb:

    Eine Datei, die Header inkludiert die oft gebraucht werden und die sich nie (oder quasi nie) ändern, und die dann als Precompiled Header einbinden, bringt ordentlich Speed beim kompilieren.

    Selber gemessen?
    Ich habe den Eindruck, precompiled headers funktionieren nur auf Borland tadellos. Auf MS bringen sie nur was für <windows.h> und Konsorten. Was anderes in die "stdafx.h" zu stopfen, bringt weniger als Bescheidenheit beim Inkludieren. Und auf GCC hat es keinen Effekt.



  • volkard schrieb:

    Selber gemessen?

    Naja. Ich habe ein paar größere VC++-Projekte von teilweise furchtbarer include-Technik auf precompiled umgestellt. Es waren sich immer alle einig, dass es danach sehr viel schneller ging.
    Einen richtigen Test mit vernünftigen includes vs. precompiled und Zeitmessung habe ich nicht gemacht.

    Edit: hey, danke dass du meinen Schreibfehler im quote korrigiert hast 😃



  • volkard schrieb:

    Auf MS bringen sie nur was für <windows.h> und Konsorten. Was anderes in die "stdafx.h" zu stopfen, bringt weniger als Bescheidenheit beim Inkludieren.

    Da muss ich widersprechen. Zumindest unter MSVC++ 2008 spürt man einen deutlichen Gewinn. Für Header wie <vector> , <list> oder <boost/foreach.hpp> , die ich in vielen Modulen einsetze, spare ich durch vorkompilierte Headerdateien einiges an Kompilierzeit. Gemessen habe ichs nicht, aber es ging definitiv schneller.



  • ich habs mal gemessen bei nem größeren projekt.
    da war aber viel drin: standard-header, boost, ogre, ... ne ganze menge riesen zeugs halt.
    da war es von ner viertel stunde auf (wenn man was im pch geändert hat und der somit neu compiliert werden muss) 5minuten geschrumpft.
    wenn der pch nicht neu compiliert werden musste hatte sich die zeit glaube ich noch einmal halbiert.

    allerdings waren dort überdurchschnittlich viele includes in headern und auch noch im source-code mehrere zu viel...

    war mit dem msvc9.

    bb


Anmelden zum Antworten