temporären Array einer Funktion als Parameter übergeben



  • Hallo Leute,

    ich habe mal eine wahrscheinlich echt dumme Frage. Schlagt mich aber bitte deshalb nicht tot. Um's kurz zumachen, schaut euch bitte mal folgenden Codeschnipsel an:

    struct my_type {
      char wert1;
      // ...
    };
    
    void foo(unsigned int argc, my_type *argv) {
      for(unsigned int i=0; i<argc; ++i)
        std::cout << argv[i].wert1;
      std::cout << std::endl;
    }
    
    void test() {
      {
        my_type tmp[] = {'a', 'b', 'c'};
        foo(3, tmp);
      }
    
      {
        my_type tmp[] = {'H', 'a', 'l', 'l', 'o'};
        foo(5, tmp);
      }
    
      // usw.
    
    }
    

    In Wirklichkeit handelt es sich bei foo natürlich um etwas anderes und auch der struct sieht etwas anders aus. In meinem Programm rufe ich aber bisher so in dieser Art eine solche foo-Funktion tatsächlich immer auf.
    Meine Frage ist nun eher von kosmetischer Natur: Und zwar gefällt es mit nicht, einen Block immer aufzumachen um eine temporäre Variable zu erstellen. Ich möchte gar keine Variable (Variablennamen) für den Parameter verwenden, also auch nicht zum Beginn ein paar globale Variablen anlegen.

    Ich würde es schön finden, wenn soetwas in der Art gehen würde:

    void test() {
      foo(3, my_type[] = {'a', 'b', 'c'});
      foo(5, my_type[] = {'H', 'a', 'l', 'l', 'o'});
      // usw.
    }
    

    Und das ist natürlich syntaktisch nicht korrekt. Ich habe echt keine Ahnung wie dafür der korrekte Syntax aussieht. Weiss das jemand, oder geht das vielleicht gar nicht?

    Vielen Dank und Gruß,
    Sven



  • Also, du könntest einen Konstruktor in deine Struktur einfügen:

    struct my_type
    {
      // ...
      my_type(char c1,...);
    };
    
    // ...
    foo( 3, my_type('a','b','c') );
    // ...
    

    Dann würde das temporäre Objekt nur noch implizit erstellt werden. Allerdings erstellst du somit nur ein Objekt und nicht ein Array, wobei das Objekt ja eine Liste von char-Werten gespeichert haben kann.

    Was du auch machen könntest, wäre, der Funktion einen String zu übergeben (den kannst du ja direkt als Stringkonstante schreiben) und die Funktion (foo) nimmt ihn dann auseinander und erzeugt in einer Schleife dynamische Objekte, welche sie mit den Werten der Stringelemente initialisiert.



  • Danke, aber vergiss strings usw., habe ja gesagt, dass in Wirklichkeit die Struktur etwas aussieht. Es sollte nur ein vereinfachtes Beispiel sein. Und es soll schon so wie von mir dahin geschrieben ein Array sein.

    Ich möchte nur

    {
      my_type tmp[] = {'a', 'b', 'c'};
      foo(3, tmp);
    }
    

    durch etwas kürzeres a la

    foo(3, my_type[] = {'a', 'b', 'c'});
    

    ersetzen. Dies ist aber so syntaktisch falsch. Darum möchte ich wissen, wie für das gewollte der richtige Syntax aussieht (deshalb nämlich ne peinliche Frage) oder ob das gar nicht ohne temporäre Variable funktioniert (dann weniger peinliche Frage).



  • Geht nicht einfacher...



  • ok, danke!


Anmelden zum Antworten