Funktion mit variabler Parameteranzahl ala printf



  • Hallo zusammen

    Bin mir leider nicht sicher ob dies nun ein C oder C++ Problem ist.

    Ich habe eine Funktion mir variabler Anzahl von Parameter:

    void Test(const wchar_t *format, ...)
    {
        String sData;
        va_list vaPtr;
        va_start(vaPtr, format);
    
        //return always the data
        sData.vprintf(format, vaPtr);
    }
    

    Diese Funktion möchte ich nun in einer weitern Funktion Kapseln.
    Ist dies überhaupt mit einer variablen Parameteranzahl möglich?

    MfG Stephan



  • Du willst Variadic Templates, keine Ellipse. 😉



  • Was willst du überhaupt bewerkstelligen?



  • Ich vermute nein (ohne Variadic Templates). Mach es einfach so wie bei printf und vprintf (Google hilft weiter).



  • 314159265358979 schrieb:

    Du willst Variadic Templates, keine Ellipse. 😉

    Was ist an Variadic Templates besser als an einer Ellipse? Ich hab Ellipsen schon nie gebraucht, Variadic Templates schauen auch nicht viel besser aus.



  • 9876546345342 schrieb:

    314159265358979 schrieb:

    Du willst Variadic Templates, keine Ellipse. 😉

    Was ist an Variadic Templates besser als an einer Ellipse? Ich hab Ellipsen schon nie gebraucht, Variadic Templates schauen auch nicht viel besser aus.

    Eines der wichtigsten Gründe ist: Typsicherheit.
    Dann natürlich auch, dass alles zur Compile-Time passiert im Gegensatz zu Ellipsen.



  • Mentras schrieb:

    Dann natürlich auch, dass alles zur Compile-Time passiert im Gegensatz zu Ellipsen.

    Was heisst, dass aus einem variadischen printf-Äquivalent etwa hundert verschiedene Funktionen generiert werden müssen.



  • weiterdenker schrieb:

    Mentras schrieb:

    Dann natürlich auch, dass alles zur Compile-Time passiert im Gegensatz zu Ellipsen.

    Was heisst, dass aus einem variadischen printf-Äquivalent etwa hundert verschiedene Funktionen generiert werden müssen.

    Im Durchschnittsfall wohl eher 4 oder 5 Funktionen, aber wen interessiert das überhaupt? Oder worauf willst du hinaus? 😉



  • Außerdem kann man bei Variadic Templates non-PODs übergeben.



  • Mentras schrieb:

    9876546345342 schrieb:

    314159265358979 schrieb:

    Du willst Variadic Templates, keine Ellipse. 😉

    Was ist an Variadic Templates besser als an einer Ellipse? Ich hab Ellipsen schon nie gebraucht, Variadic Templates schauen auch nicht viel besser aus.

    Eines der wichtigsten Gründe ist: Typsicherheit.
    Dann natürlich auch, dass alles zur Compile-Time passiert im Gegensatz zu Ellipsen.

    Klar, aber wozu braucht man sowas? Für printf und sonst?



  • std::bind, std::tuple, std::function, um nur drei zu nennen. Ansonsten kann ich mir so was für Factories gut vorstellen, und es dürfte eine Menge Template-Metaprogrammierung stark vereinfachen.



  • Beispiele aus der Standardbibliothek: std::tuple, std::function, std::bind, std::thread etc

    Ist eigentlich immer dann sinnvoll wenn eine variable Anzahl an Parametern möglich ist.


Log in to reply