ich bin etwas unsicher ob Templates eine passable Realisierung meiner Aufgabe sind: Ich habe eine Algorithmus der als input ein file mit einer spalte double werte bekommt. Alle meine funktionen und Datenstrukturen arbeiten mit diesen double werten.
Jetzt will ich mein Programm dahingegen erweitern dass nicht nur ein file mit double werten eingegeben werden kann sondern auch komplexe eingaben (3 + 5i z.B) , d.h im file sind zwei spalten mit double werten vorhanden.
In den files steht ob es sich um einen normalen (1 double) oder komplexen (2 double) input handelt. Ich wollte jetzt mit Templates arbeiten und meinen code umstrukturieren auf templates eben. Aber ist das überhaupt möglich bzw. mach das Sinn? Templates sind doch zur Compilezeit bekannt und nicht erst zur Laufzeit.....also die verwendung macht mich misstrauisch - es müssten auch mit templates ziemlich viele if-else abfragen rein oder?
Ein template ist vereinfacht gesagt dafür Gedacht wenn du den Funktionsumfang einer Klasse für verschiedene Datentypen bereitstellen möchtest und sich sozusagen der Grunddatentyp mit dem die Klasse arbeitet verändert.
Zum Beispiel std::vector bietet dir die Methoden eine Liste von Daten zu halten und zu verwalten. Dabei ist es egal ob diese Liste jetzt aus integern, chars, strings oder irgendwelchen bliebigen anderen Typen besteht. Um das zu erreichen ist std::vector als Template realisiert.
Ein anderes Beispiel wo ein vector keinen Sinn machen würde wäre zum Beispiel eine Rechenklasse welche zum Beispiel eine Methode Add anbietet wo ein Integerwert auf den interen Wert der Klasse aufaddiert wird. Wenn du hier jetzt noch die Möglichkeit möchtest ein double oder auch einen string draufzuaddieren würde dir ein Template ja überhaupt nichts bringen sondern du müsstest halt weitere Add Methoden mit unterschiedlichen Parametern überladen.
In deinem Fall (wenn ich ihn richtig verstanden habe) würde dir ein Template also auch überhaupt nichts bringen. Du brauhst lediglich eine Klasse welche eine Datei öffnet und dabei unterscheiden kann wie die Datei aufgebaut ist...
Jede reelle Zahl ist auch eine komplexe Zahl. Warum liest du den ganzen Kram nicht einfach gesammelt als komplexe Zahlen ein und setzt halt den imaginären Teil auf 0.0, wenn er fehlt? -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Ich arbeite an einer laufzeitkritischen anwendung. Ich könnte mir vorstellen dass bei der Bibliotheksfunktion die ich aufrufe viel unnötige Zeit draufgehen könne wenn er komplex rechnet obwohl alles imaginär 0 ist. Man könnte natürlich die Bibliotheksfunktion mit if-else verzweigen und nur durch ein flag ausgehend vom einlese-input dann verzweigen. Aber dazu müsste ich dann das complexe array wieder auf ein reelles array stutzen was auch wieder performance kostet....