Mehrere Klassenmethoden Zusammenfassen.



  • Hallo Leute,

    ich möchte folgendes ein wenig zusammenfassen:

    void meineklasse::meinefunktion1(...){
    // Anweisungen
    };
    
    void meineklasse::meinefunktion2(...){
    // Anweisungen
    };
    
    void meineklasse::meinefunktion3(...){
    // Anweisungen
    };
    

    Kann man es irgendwie zusammenfassen? Sowas wie:

    meineklasse::{
    void meinefunktion1(...){
    // Anweisungen
    };
    
    void meinefunktion2(...){
    // Anweisungen
    };
    
    void meinefunktion3(...){
    // Anweisungen
    };
    }
    

    Danke für eure Hilfe.



  • Nein, nicht ohne Präprozessortricks.



  • Ist es besser dann besser die Methoden innerhalb oder außerhalb der klasse zu definieren?



  • darkfate schrieb:

    Ist es besser dann besser die Methoden innerhalb oder außerhalb der klasse zu definieren?

    Sofern möglich ausserhalb in einer .cpp-Datei. Hat zwei Vorteile: Erstens müssen die Module, welche deine Klasse benutzen, bei einer kleinen Änderung der Implementierung nicht komplett neukompiliert werden. Zweitens hast du weniger Abhängigkeiten, da du viele Headerdateien, die für die Implementierung benötigt werden, erst in der .cpp-Datei einbinden kannst.

    Sobald du ein grösseres Projekt hast, sind diese beiden Vorteile essentiell.



  • Es gibt auch noch andere Vorteile: rein optisch Interface von Implementierung zu trennen, gestaltet den Code viel übersichtlicher (besonders, wenn jemand anderes deine Klasse(n) nutzen will).
    Außerdem kann man so ein einziges, plattformunabhängiges Interface wählen und plattformabhängige Implementierungen auslagern. Hat alles in allem nur Vorteile. 👍

    Aber es stimmt schon, sowas nervt mich manchmal:

    template <typename Ch, typename Tr, typename Alloc>
    int some_class<Ch, Tr, Alloc>::some_fnc(const std::string& some_param) { }
    
    // noch besser:
    
    template <typename Ch, typename Tr, typename Alloc>
    typename some_class<Ch, Tr, Alloc>::state_type some_class<Ch, Tr, Alloc>::iostate() { }
    

    Da wären irgendwelche Kniffe schon wünschenswert.


  • Administrator

    Ad aCTa schrieb:

    Da wären irgendwelche Kniffe schon wünschenswert.

    Das letztere wird im neuen Standard einfacher:

    template <typename Ch, typename Tr, typename Alloc>
    auto some_class<Ch, Tr, Alloc>::iostate() -> state_type
    { }
    

    Aber wenn euch das wirklich ein Dorn im Auge ist, dann fehlen euch eindeutig entsprechende Werkzeuge. Zum Beispiel mit VAX: Deklaration rechtsklicken -> Create Implementation. :p

    Grüssli



  • Von Visual Assist X sollte ich endlich mal die Demo ausprobieren... 😉

    Aber das Problem ist ja nicht nur der Schreibaufwand. Ich finde, ausserhalb der Klassendefinition deklarierte Memberfunktionstemplates werden sehr schnell unübersichtlich. Besonders, wenn die Klasse einige Templateargumente und Typedefs besitzt, die benutzt werden.



  • > Aber wenn euch das wirklich ein Dorn im Auge ist, dann fehlen euch eindeutig entsprechende Werkzeuge.

    Naja, Hobbyprogrammierer haben eben nicht mehr als VS Express 🙂

    > Das letztere wird im neuen Standard einfacher:

    Ja, schön ist das schon, nur kann das noch eine Weile dauern, bis der MSVC-Compiler das auch implementiert...

    Edit: Muhahahaha, 666 Posts 😡


Anmelden zum Antworten