Tool zum Überprufen der Access Modifiers



  • Hallo,

    gibt es für C++ ein Tool, mit dem man überprüfen kann, inwieweit man die Access Modifiers von Member Functions so restriktiv wie möglich gewählt hat?

    Soll heissen, dass, z.B. wenn man eine Member Function als public deklariert hat, das Programm aber auch kompilierfähig wäre, wenn man sie als private deklarierte, das Tool dies meldet.



  • Ist mir keins bekannt - und macht auch imho wenig Sinn. Schließlich bieten die meisten Klassen mehr Methoden als du in einer bestimmten Anwendungssituation benötigst.



  • Warum brauchst du ein Tool dafür? Ob eine Methode const oder non-const ist, gehört mit zum Klassendesign.



  • Irgendwer schrieb:

    Warum brauchst du ein Tool dafür? Ob eine Methode const oder non-const ist, gehört mit zum Klassendesign.

    Mit Access Modifiers meinte ich private, protected und public (ich dachte, const läuft unter CV-Modifier).

    CStoll schrieb:

    Ist mir keins bekannt - und macht auch imho wenig Sinn. Schließlich bieten die meisten Klassen mehr Methoden als du in einer bestimmten Anwendungssituation benötigst.

    Im Rahmen des Debuggens mache ich immer wieder Methoden public, die das eigentlich nicht sein dürften. Das vergesse ich dann manchmal, wieder rückgängig zu machen. Und wenn ich mehrere Anläufe brauche, um eine Gruppe von Klassen zu erstellen, kommt es vor, dass ich die Übersicht verlieren und am Ende Methoden den falschen Access Modifier haben.



  • dann mach das doch per macro

    #ifdef _DEBUG
    public:
    #else
    private:
    #endif
       void f1();
       int member;
    

    edit: oder noch besser xD

    #ifdef _DEBUG
     #define private public
     #define protected public
    #endif
    


  • ingobulla schrieb:

    Im Rahmen des Debuggens mache ich immer wieder Methoden public, die das eigentlich nicht sein dürften. Das vergesse ich dann manchmal, wieder rückgängig zu machen. Und wenn ich mehrere Anläufe brauche, um eine Gruppe von Klassen zu erstellen, kommt es vor, dass ich die Übersicht verlieren und am Ende Methoden den falschen Access Modifier haben.

    Und woher soll irgendein Tool jetzt wissen, welche Methode absichtlich public ist und welche du nur zu Debug-Zwecken freigegeben hast?



  • das tool könnte überprüfen auf welche methoden/member von aussen zugegriffen wird und dementsprechend könnte es alle benutzen publizieren und die adneren privatisieren

    allerdings, wenn du manche member public machst um von aussen drauf zu zugreifen, dann machst du das wahrscheinlich auch. und diesen zugriff müsstes du auch wieder entfernen sonst könnte so ein tool auch nicht funktionieren

    also alles in allem keine gute idee wie du vorgegangen bist



  • ingobulla schrieb:

    Im Rahmen des Debuggens mache ich immer wieder Methoden public, die das eigentlich nicht sein dürften.

    Ich nehme mal an, dass du hier mit "debuggen" irgendwelche debug-Funktionen meinst, die die Interna deiner Klassen in die Ausgabe spucken. Nur für sowas die aufgerufenen Methoden public zu machen, halte ich für grundfalsch.

    1. Benutze wenns geht einen richtigen debugger. Bei Programmen mit ~1000 Zeilen und mehr wird das cout-debugging sonst sowieso zu einem Krampf.
    2. Wenn du doch unbedingt Methoden brauchst, die an die Eingeweide deiner Klassen dürfen und du also so oder so an deiner Klasse was verändern musst/willst, dann mach die Funktionen, die da reingucken dürfen, zu friends der Klasse. Wenn du den debug-Funktionen auch noch entsprechende Namen gibst, ist das recht einfach, deinen gesamten Code nach Zeilen durchzugreppen, die "friend" und "Debug" enthalten.


  • Alternativ: immer wenn du so eine Funktion public machst, einen Kommentar "CHANGEME_FOR_RELEASE" o.ä. darüber setzen. Danach kannst du dann auch suchen.


Anmelden zum Antworten