verschiedene Variablen Typen in Arrays/Funktionen (Anfängerfrage)



  • Hallo liebe Community.
    Ich bin noch neu in C++ und habe vorher PHP gelernt.
    In PHP kann man ein ein Array verschiedene Variablen Typen speichern.
    Z.B.

    $beispiel = array();
    $beispiel[1] = "string";
    $beispiel[2] = 32;
    $beispiel[3] = true;
    //usw...
    

    In C++ muss man aber angeben, welche Variablen in einem Array gespeichert werden und man kann nicht verschiedene Typen gleichzeitig speichern.
    Wie macht ihr das denn, wenn ihr in so eine Situation kommt, in der ihr mehrere unterschiedliche Variablen Typen in ein Array schreiben müsst, oder wenn es bei einer Funktion verschiedene Rückgabe Typen geben soll?

    Grüße,
    Steffie



  • Also Funktionen würde ich einfach überladen.

    Sieht ungefähr so aus:

    int funktion1 (int a);
    string funktion1 (string blabla);
    

    Jetzt unterscheidet der Compiler anhand der Argumente, mit der du dir Funktion aufrufst, welche er nehmen muss.
    Weiß nicht, ob du das so meintest...

    Beim Array fällt mir jetzt gerade keine Möglichkeit ein.
    Allerdings auch keine Situation, in der du das brauchen könntest...
    Wenn du wirklich sowas brauchst, konvertierst du sonst einfach die Typen.



  • Sinthoras schrieb:

    Also Funktionen würde ich einfach überladen.

    Sieht ungefähr so aus:

    int funktion1 (int a);
    string funktion1 (string blabla);
    

    Jetzt unterscheidet der Compiler anhand der Argumente, mit der du dir Funktion aufrufst, welche er nehmen muss.
    Weiß nicht, ob du das so meintest...

    Ich dachte eher an so etwas:

    int funktion1(int a)
    {
      if(a == 1) return "abc";
      else return 123;
    }
    

    Dieser Code funktioniert nicht, weil die Funktion keinen String zurückgeben kann. So meinte ich das.



  • Steffie schrieb:

    Sinthoras schrieb:

    Also Funktionen würde ich einfach überladen.

    Sieht ungefähr so aus:

    int funktion1 (int a);
    string funktion1 (string blabla);
    

    Jetzt unterscheidet der Compiler anhand der Argumente, mit der du dir Funktion aufrufst, welche er nehmen muss.
    Weiß nicht, ob du das so meintest...

    Ich dachte eher an so etwas:

    int funktion1(int a)
    {
      if(a == 1) return "abc";
      else return 123;
    }
    

    Dieser Code funktioniert nicht, weil die Funktion keinen String zurückgeben kann. So meinte ich das.

    du könntest einfach statt abc 456 zurückgeben und dann außerhalb der funktion 'umwandeln bsbw.:

    func{
          int* bla = 456
    return bla;}
    
    if(bla == 456) {
        string blabla = "abc";}
    delete bla;
    


  • Kommt dann darauf an, wofür du das brauchst.

    Wenn du's z.B. einfach nur für die Ausgabe brauchst, nimmst du halt immer string.
    Ich denke mal nicht, dass du das willst, also würde ich folgendes machen:

    int iwert;
    string swert;
    //...
    void funktion1 (int a, int &intwert, string &stringwert)
    {
    if (a == 1) intwert = 123;
    else stringwert = "abc";
    }
    

    Dann musst du's nur halt mit beiden Möglichkeiten aufrufen.
    Also entweder

    iwert = funktion1 (1, &iwert, &swert)
    

    ...oder...

    swert = funktion1 (0, &iwert, &swert)
    

    Wofür man das dann benutzen kann, ist mir aber immernoch schleierhaft...



  • oder boost::any



  • Maxi schrieb:

    oder boost::any

    Ja das gefällt mir ganz gut.
    Hat das auch irgentwelche Haken?
    Alles in C++ hat nämlich irgentwelche Haken, wenn es bequem sein soll. (So kommt es mir zumindest vor o.O)



  • Es ist kein Standard (soweit ich weiß).

    Sonst ist mir keiner bekannt...



  • Weil du wohl standart und nicht standard geschrieben hast.



  • Danke, ich hab's dann auch selbst bemerkt 😉



  • Wenn es bequem sein soll, dann programmiere Python.
    C++ ist alles nur nicht "bequem".


Anmelden zum Antworten