Klassen abhängigkeit ermitteln



  • Fo3r5ter schrieb:

    Habe gerade noch ein paar Infos zu Reflection und Metaklassen gefunden.

    C++ unterstützt keine Reflection. Entweder du registrierst die Klassen von Hand, oder du nimmst irgendein Tool, das Klassenbeziehungen aus dem Code ableiten kann.



  • Angeblich gibt es eine Boost::Reflection. Habe die Informationen von hier. http://de.nntp2http.com/comp/lang/iso-c++/2009/05/ccf1b2e67472073a3c80bb290fe9a015.html

    Der Nutzer will das zwar für einen anderen Sinn nutzen aber angeblich kann man das für mein Problem auch nutzen.

    Die Informationen direkt aus dem Code zu Interpretieren hatte ich mir auch schon als Idee beiseite gelegt. Man müsste nach den #import Einträgen suchen und gucken welche der Klassen zu denen gehören, die getestet werden sollen. Wollte aber erst sichergehen ob es da nicht eine bessere Patentierte Lösung gibt.

    ...

    Fo3r5ter



  • Du meinst wohl #include?



  • @ Pi: Ähhhh ja klar. Sorry. Keine Ahnung wie ich jetzt bei Java gelandet bin.



  • Fo3r5ter schrieb:

    Angeblich gibt es eine Boost::Reflection.

    Nicht als offizielle Boost-Bibliothek, siehe hier. Vielleicht ist was in Entwicklung. Trotzdem ändert eine Bibliothek nichts an der Tatsache, dass du in C++ für Reflection die Programmstruktur manuell angeben musst oder auf externe Tools angewiesen bist. Das Sprachmittel existiert nicht (u.A. weil es zu viele Nachteile für zu wenig Nutzen bringt und sich nicht besonders gut in C++ integriert).

    Übrigens könntest du dir auch mal die Bibliothek CAMP anschauen, die geht ebenfalls in die Richtung.



  • Eine Frage. Wie kommt der Compiler an die Abhängigkeiten der Klassen? Immerhin prüft dieser ja auch welche Klassen wie zusammen hängen und verknüpft die Header Dateien.


  • Mod

    Fo3r5ter schrieb:

    Eine Frage. Wie kommt der Compiler an die Abhängigkeiten der Klassen? Immerhin prüft dieser ja auch welche Klassen wie zusammen hängen und verknüpft die Header Dateien.

    Nein, umgekehrt. Die Headerdateien verknüpft der Programmierer, der Präprozessor wertet diese Verknüpfungen aus und dann kann der Compiler die Abhängigkeiten der Klassen direkt ablesen. Der Compiler sieht nur

    class A
    {
     // ...
    };
    
    // ...
    
    class B: public A
    {
     // ...
    };
    


  • Nur #include beachten wird gut.
    Dran denken, daß nur *.cpp getestet werden können.
    Jede Foo.cpp ist von der passenden Foo.hpp abhängig.

    Darüberhinaus vermute ich:
    Um einen Header zu testen, kommt man nicht umhin, alle *.cpp zu testen, die diesen Header inkludieren.
    Man sollte stets die *.cpp testen, die am meisten Headers fertigmacht.



  • Benutze doch einfach DoxyGen, das erfasst Dir die Abhängigkeiten und erstellt sogar einen Graph.

    http://www.stack.nl/~dimitri/doxygen/



  • Ich habe ein ähnliches Problem mal mit dem DIA SDK gelöst. Allerdings müsstest du dafür Visual Studio benutzen. Mit dem Framework kannst du aus den im Debug Modus erstellten *.pdb Dateien alle Klassen auslesen, mit Basisklassen usw. Ist allerdings COM und recht fumlig.


Anmelden zum Antworten