Zugriff auf Dateiinhalt mit operator[]
-
Hallo!
Ich habe mir eine Klasse geschrieben, die eine ähnliche Funktionalität wie ein vector aufweist, allerdings die Daten in einer Datei gespeichert hält.
Dort habe ich dann z.B. die Funktionen get(unsigned int index) und set(unsigned int index) mit denen ich die entsprechenden Vektorelemente lesen/verändern kann. Dort wird dann die Datei geöffnet und der Inhalt überschrieben oder gelesen.Nun würde ich ganz gerne per operator[] darauf zugreifen können. Das geht aber erstmal nicht, da ich dort ja eine Referenz auf ein Objekt zurückgebe. Ich kann aber keine Referenz auf ein Objekt zurückgeben, welches sich nicht im Speicher befindet.
Gibt es irgendeine Möglichkeit diese Funktionalität in meine Klasse einzubauen?
Die Alternative wäre get und set für std::vector zu implementieren. Grundidee ist eben, dass ich beide Klassen (std::vector und meine vector-datei Klasse) mit dem gleichen Code verwenden kann und nur den Datentyp ändern muss.
LG plancktum
-
plancktum schrieb:
Gibt es irgendeine Möglichkeit diese Funktionalität in meine Klasse einzubauen?
Für Skalare geht es, auch wenn nur mit Proxys.
Für nicht-PODs wird es leider sehr schwer, bzw. gar nicht möglich sein. Sicher, dass das in eine Datei muss? Das ist ein Performance-Killer schlecht hin...
-
Grundsätzlich: Proxy-Objekt zurückgeben, das sich wie eine Referenz verhält. Schau dir mal
std::vector<bool>::referencean.Aber bist du sicher, dass du so auf deine Datei zugreifen willst? Das kann recht langsam werden. Kannst du nicht gleich einen Block ins RAM laden und am Schluss zurückschreiben?
-
Ich weiß, dass es langsam ist, aber ich kann die Objekte nicht alle im Speicher behalten.
Rechenzeit ist nicht das Hauptproblem, sondern der Arbeitsspeicher.
Deswegen eben in Dateien schreiben.Das mit dem Proxy verstehe ich nicht.
Wird also wohl darauf hinauslaufen, dass ich mir Funktionen get und set für std::vector schreiben muss.
-
proxy entwurfsmuster:
http://de.wikipedia.org/wiki/Stellvertreter_(Entwurfsmuster)
-
Ah... Jetzt verstehe ich.
Nun greift meine Vektor-Datei Klasse (nennen wir sie stateVectorFile) auf Objekte names State zu.
Wenn ich jetzt gerne auf ein Objekt obj von Typ stateVectorFile mit obj[i] zugreifen möchte, dann müsste ich dazwischen so ein Proxy-Objekt schalten.
Was kein Problem ist, ist wenige States im Speicher zu behalten. Aber den kompletten vector mit allen States kann ich nicht im Speicher halten.
Wie genau muss ich denn dann darauf zugreifen? Das ist mir noch nicht ganz klar.
Spontan hätte ich eben gesagt, dass solche Proxy-Objekte angelegt werden wenn sie gebraucht werden und dann wird damit gerechnet. Im Hintergrund greifen diese Proxy-Objekte dann auf meine stateVectorFile zu. Wie ist das aber mit dem vector-charakter vereinbar?