Datentyp dynamisch festlegen



  • Moin,

    Ich möchte mein Programm so schreiben, dass der Typ einer Variabel erst vom Nutzer festgelegt wird.
    Also als ganz einfaches Beispiel:

    Ich habe ein Array in dessen Elemente entweder int oder double abgespeichert werden sollen, abhängig davon was der Nutzer bei Ausführung des Programmes eingibt.
    Ich bekomme dies aber weder mit einem template noch mit auto hin.
    Auch längeres googeln brachte keine Lösung, daher die Frage ist dies überhaupt möglich?

    Aufgaben Ausschnitt:

    "Schreiben Sie eine Mainfunktion, in der die Dimension eingelesen wird und dann dynamisch
    Felder entsprechender Länge des Typs int und double angelegt werden." -> Der Array soll später an Template-Funktionen übergeben werden, die kein Problem darstellen.

    Ich weiß, dass ich einfach 2 Arrays mit dem jeweils Anderen Typ erstellen und mit einer Fallunterscheidung nur einen weiter benutzen könnte, aber wenn es die elegantere Option gibt, würde ich gerne wissen wie.

    Vielen Danke
    Tristan



  • Würde mit zusätzlicher Magie schon klappen, rate aber davon ab.

    Nimm zwei Arrays.



  • Du kannst die Arrays auch über eine template-Funktion anlegen. Wenn es denn unbedingt manuelle Speicherverwaltung sein muss und std::vector nicht benutzt werden darf. Und dann arbeitest du einfach templatisiert (?) weiter...

    #include <memory>
    
    template<typename T>
    void func( T* arr, std::size_t count )
    {
       // tu was
    }
    
    template<typename T>
    void do_work( std::size_t count )
    {
       T* arr = new T[count];
       func( arr, count );
       delete[] arr;
    }
    int main()
    {
       ...
       if( input == 1 ) do_work<int>( count );
       else             do_work<double>( count );
    }
    

    Allerdings sollte man statt der manuellen Speicherverwaltung std::vector benutzen, leider scheint die STL bei vielen fast allen Hochschulprofs auch nach 20 Jahren noch nicht angekommen zu sein.



  • @DocShoe sagte in Datentyp dynamisch festlegen:

    Allerdings sollte man statt der manuellen Speicherverwaltung std::vector benutzen, leider scheint die STL bei vielen fast allen Hochschulprofs auch nach 20 Jahren noch nicht angekommen zu sein.

    Ich hatte bei meinen Kollegen auch Schwierigkeiten, sie zur STL zu überzeugen. Erst mit C++11 habe ich da so richtig einen Fuß in die Tür bekommen.


Anmelden zum Antworten