Ich möchte Informationen aus einer Vorlagenklasse in eine Datei schreiben und dann in der Lage sein, aus einer Datei zu lesen, um eine Instanz dieser Vorlagenklasse zu erstellen. Ich weiß, wie ich es schreiben kann (verwenden Sie eine std::ofstream
, schreiben Sie seine Template-Parameter und relevante Informationen), aber ich bin irgendwie verloren beim Lesen zurück. Ich konnte die Template-Parameter aus der Datei lesen, aber sie kann diese Instanz der Template-Klasse zur Laufzeit nicht kompilieren, so dass sie fehlschlagen würde (oder gar nicht kompilieren würde). Der Grund dafür ist, dass ich etwas im permanenten Speicher speichern kann. Die Klasse, für die ich das versuche, ist Eigens Tensor-Klasse, wenn das überhaupt hilft (das gegebene Beispiel ist allgemeiner und eine Lösung dafür würde immer noch funktionieren). Irgendwelche Ideen, wie ich das erreichen kann?Templates im persistenten Speicher speichern?
Ein Beispiel:
template<int example> class A{
//omitted constructors and everything else
void write(std::ofstream& out){ //writes relevant information of class to a file
out<<example;
}
};
Wie zum Lesen der Datei:
void read(std::ifstream& in){
int example;
in>>example;
A<example> a; //doesn't work because A<example> can't be compiled at runtime
}
EDIT: Ich verstehe, wie Template-Klassen arbeiten, und dass sie nur dann kompiliert, wenn sie verwendet werden, . Ich verstehe auch, warum mein Beispiel nicht funktioniert. Meine Frage ist, ob es mir möglich ist, neue Instanzen zur Laufzeit zu kompilieren. Ich weiß, dass es möglich ist, dies mit .cpp-Dateien zu tun (nicht sicher, wie, ich weiß nur, dass es möglich ist). Ich weiß nicht, ob das mit Vorlagenklassen möglich ist. Meine derzeitige Lösung wird wahrscheinlich sein, dass mein Programm neue ausführbare Dateien erstellt und diese ausführt, damit sie die notwendigen Dinge bereits kompiliert haben, aber das ist langsam und unbefriedigend, also lasse ich diese Frage in der Hoffnung auf eine bessere Lösung.
'Neue Instanzen zur Laufzeit kompilieren' - sicherlich nicht, es sei denn, Sie programmieren einen Compiler. Berücksichtigen Sie, dass sich der Compiler möglicherweise auf einem anderen Computer befindet, als Ihre ausführbare Datei ausgeführt wird. Wie kann die ausführbare Datei eine Kompilierung auslösen und ausführen, ohne dass ein vollständiger Compiler enthalten ist? – Aganju
@Aganju Ich sorge mich wirklich nur darum, dass es auf meinem Rechner läuft, da ich nur dieses Programm schreibe, um etwas zu lernen, das völlig unabhängig von diesem Problem ist. Ich könnte leicht zu Python wechseln und Tensorflow oder Numpy verwenden, aber ich habe ein paar Gründe, warum ich nicht will. – BadProgrammer99