Funktion mit unendlich vielen Parametern...



  • Hallo!

    Hab schon dazu gegoogelt, leider nicht wirklich was gefunden...

    Also ich möchte einfach so eine Funktion wie sprintf(); machen...
    Also dass einfach beliebig viele Parameter übergeben werden können!

    Wie kann ich das realisieren?

    Vielen dank!

    mfg
    mitos



  • Das geht theoretisch mit der Ellipse (…), aber das ist nur in C halbwegs vertretbar, denn wenn du eine solche Funktion mit C++-Objekten fütterst erzeugst du undefiniertes Verhalten.



  • hmm wie könnte ich dann sowas, also beliebig viele parameter in c++ realisieren?

    danke,
    mfg
    mitos



  • In C++0x mit Variadic Templates. In C++98 könntest du Boost.Preprocessor benutzen um den Code für, sagen wir, Funktionen mit 1-20 Parametern zu erzeugen.



  • Hallo

    Wenn es sich bei den Paraetern immer um den gleichen Typ handelt, kannst du auch einen std::vector benutzen. Vielleicht sogar in Verbindung mit boost::any. das habe ich mir aber noch nicht angeschaut.

    chrische



  • Ist tupel dafür nicht auch geeignet?



  • hmm ok werd das jetzt mal versuchen, hätte noch ne andere frage:

    wenn ich sowas deklariere:
    char buffer[256][256];

    wie kann ich es anstellen, dass ich das array einer funktion übergeben kann?

    gibt es eine andere möglichkeit als void func(char buf[256][256]); ??

    danke

    mfg
    mitos


  • Mod

    mitos schrieb:

    hmm ok werd das jetzt mal versuchen, hätte noch ne andere frage:

    wenn ich sowas deklariere:
    char buffer[256][256];

    wie kann ich es anstellen, dass ich das array einer funktion übergeben kann?

    gibt es eine andere möglichkeit als void func(char buf[256][256]); ??

    danke

    mfg
    mitos

    diese Deklaration ist äquivalent zu
    void func(char (*buf)[256]);
    dir Funktion erhält also einen Zeiger auf die erste Spalte des Arrays.
    Eine andere Möglichkeit ist die Übergabe per Referenz:
    void func(char (&buf)[256][256]);
    hierbei wird die Konvertierung in einen Pointer unterdrückt.
    Und nicht zuletzt
    void func(char (*buf)[256][256]);
    geht natürlich auf, wenn du dann entsprechend func(&buffer) schreibst.



  • ok vielen dank!
    mfg
    mitos


Anmelden zum Antworten