variable anzahl an parametern delegieren



  • Hallo,

    ich würde gerne eine Methode implementierenm, die eine variable anzahl an argumenten hat. Also sowas:

    void myMethod1(int a, int b, ...)
    {
        //Aufruf myMethod2
    }
    

    Wie kann ich nun die variablen Argumente einfach an eine andere Methode delegieren, die so aussieht:

    void myMethod2(int a, int b, ...)
    

    Vielen Dank!



  • Warum übergibst du nicht einfach einen std::vector oder wenn du es kompliziert magst einen Zeiger auf ein Array mit bestimmter Länge.



  • Aus C gibt es ellipsen http://www.cplusplus.com/reference/clibrary/cstdarg/
    Zeig aber mal was du machen möchtest, denn empfehlenswert ist das nicht unbedingt.



  • Vielleicht passen variadic templates.

    Sowas wie

    //C++0x
    template<typename ...Args>
    void myMethod1(Args&&... params){
       myMethod1(std::forward<Args>(params)...);
    }
    


  • myMethod1 soll eine Art Wrapper sein, die zum Beispiel printf und andere Ausgabemöglichkeiten wrapt. Bei printf soll sie die variablen parameter einfach delegieren...



  • Da printf selber nicht typsichere ellipsen verwendet, kannst du auch das aus stdargs benutzen. Da kannst du nichts schlecht machen, weil es eh schon schlecht ist. In C++ meidet man diese Dinge.
    Benutze in C++ die io Streams. Oder schreib halt C.



  • Hm, würde neben printf eben auch gerne syslog für die Ausgabe in log-files benutzen. Dann muss ich wohl über cstdarg gehen. Ich dachte es gäbe eine einfachere Möglichkeit alle Parameter (inkl. die variablen Parameter) einfach weiterzuleiten...

    Gruß
    henryy



  • henryy schrieb:

    Hm, würde neben printf eben auch gerne syslog für die Ausgabe in log-files benutzen. Dann muss ich wohl über cstdarg gehen. Ich dachte es gäbe eine einfachere Möglichkeit alle Parameter (inkl. die variablen Parameter) einfach weiterzuleiten...

    Wenn der Header <cstdarg> extra für variable Argumentlisten existiert, warum sollte es einfacher ohne gehen?

    Und du musst dich halt zwischen Typsicherheit und Frickelei entscheiden. In C++ sollte die erste Möglichkeit bevorzugt werden (in C natürlich auch, aber da wird es mangels Sprachmitteln manchmal schwieriger).


Anmelden zum Antworten