Vorlagen könnten Ihnen hier sicherlich helfen. Sie bieten eine Möglichkeit, die Wiederholung dieser Verarbeitung zu reduzieren, die für alle Typen gleich ist.
Ob Sie "sollten" sie verwenden ist natürlich eine schwierigere Frage, als ob es Overkill ist - beide sind Fragen der Meinungen, aber gemeinsame Verwendung würde vorschlagen, dass die Verwendung von nur einer Variablen wäre nicht der Faktor wäre Entscheide das.
Wenn der Inhalt der Dateien, die verschiedene Typen enthalten, in denselben Container verarbeitet werden müssen, oder wenn eine Datei mehr als einen Typ enthalten kann, wäre möglicherweise eine Boost-Variante besser geeignet.
Da Sie die Typen aus Datei lesen, sind diese Typen zur Laufzeit bekannt, aber da die Liste der Optionen zur Kompilierzeit bekannt ist, können Sie den Typ in der Datei überprüfen und den Typ übergeben.
if(typeFromFile == headerValueForint)
{
processFile<int>();
}
else if (typeFromFile == headerValueFordouble)
{
processFile<double>();
}
jedoch wie alle Typen, die Sie Liste numerisch sind (und ich frage mich, wie die Verarbeitung wirklich das gleiche sein könnte, wenn es keine anderen nicht-numerischen Typen ist) Sie alle Werte in als verdoppelt lesen konnte entscheiden - mit geeignete Reichweitenprüfung Es kann mehr Speicher benötigen, aber die Auswirkung hängt davon ab, was die Verarbeitung tatsächlich beinhaltet.
'Sollte ich eine Vorlage verwenden, um dies zu tun? 'Was sind die anderen Optionen vor dir? – sjsam
Ich weiß es nicht. Vielleicht deklariere einfach einen void pointer, ordne den notwendigen Speicher zu, kopiere Rohdaten und wirf dann die Pointer-Basis auf den Datentyp. Es ist nicht wirklich sauber, aber ich fühle mich wie eine Vorlage für nur eine Variable zu verwenden ist nicht optimal. Ist es ? – whiteShadow
'boost :: variant' - keine Notwendigkeit, das Rad neu zu erfinden. –