Objekte in deque packen - ich steh auf dem Schlauch....
-
Du verstehst offensichtlich die Funktionsweise der Container nicht. Wenn Du
deque<meineKlasse> deq(12);machst, dann enthält die deque bereits 12 Objekte (wenn Deine Klasse denn einen Def.-Konstr. hat). Wenn Du nun push_front aufrufst, dann hat sie bereits 13 Objekte.
Um das, was ich nun verstanden zu haben glaube, umzusetzen, solltest Du Dir eine Klasse schreiben, die eine (zunächst) leere deque<meineKlasse> sowie ein Attribut maxGroesse beinhaltet.
Dann kannst Du mit push_... Elemente in Deine deque bringen und jederzeit prüfen, ob maxGroesse erreicht ist, und dann nach Wunsch mit der deque verfahren.
-
Hallo Krümelkacker,
das Ganze befindet sich in einer dll, die von einem c# aufgerufen und mit Parametern beschickt. Wenn ich eine Klasse einfach so exportieren könnte, würde ich zum einmaligen intialisieren einfach den Konstrucktor aufrufen. Um jedoch künftige Probleme zu vermeiden, habe ich
extern"C"-Funktionen eingesetzt. Diese sind dann unabhängig von der Frameworkversion nutzbar.
Statt also nun verschiedene Memberfunktionen einer Klasse zu verwenden, verwende ich mehrereextern"C"-Funktionen. Somit wird die deque global innerhalb der dll initialisiert, damit sie in den verschiedenen extern"C"-Funktionen verfügbar ist. Ich mache quasi die ganze dll zur Klasse, die beim laden instanziert wird.
Ergo: die deque wird innerhalb der dll GLOBAL initialisiert.Da ich nun also die ganze dll quasi wie eine Klasse behandele, wird sie beim ersten Aufruf geladen. Soweit ich das nun verstehe, passiert dann folgendes (unter Vorraussetzung, dass ich die dll unter C# richtig anspreche): Bei dem ersten Aufruf einer Funktion dieser dll wird diese geladen und globale Elemente initialisiert.
@Belli: Ja. Die meisten Dokumente, die ich gelesen habe, waren quasi Kombibeschreibungen der Container. Damit schlich sich bei mir der Fehler ein, dass es bei deque einmal die Funktion capacity() gibt, die das Maximale Fassungsvermögen der Deque angibt - also dass, wass ich mit maxDeq definiert habe und die Funktion size(), die angibt, wieviele Elemente belegt sind. Capacity gibt es jedoch nur bei vector. Also werde ich auf die Größendefinition verzichten...
Danke an alle....
Jens
P.S.: Falls ich eine dll wie eine Klasse aufrufen kann - also etwa LoadLibrary(parameter 1,.....) aus c# heraus und diese Parameter dann nutzen kann..... Dann her mit dem Wissen...

-
P.S.: Falls ich eine dll wie eine Klasse aufrufen kann - also etwa LoadLibrary(parameter 1,.....) aus c# heraus und diese Parameter dann nutzen kann..... Dann her mit dem Wissen...
Solche Probleme kann man sehr gut mit swig ( www.swig.org ) lösen.
Das Teil generiert dir über deine Klassen Wrapper die du über C# ansprechen kannst.
Einfache mal anschauen, eventuell ist das was für dich.
-
xenayoo schrieb:
Damit schlich sich bei mir der Fehler ein, dass es bei deque einmal die Funktion capacity() gibt, die das Maximale Fassungsvermögen der Deque angibt - also dass, wass ich mit maxDeq definiert habe und die Funktion size(), die angibt, wieviele Elemente belegt sind. Capacity gibt es jedoch nur bei vector.
Auch bei Vektor hat der Rückgabewert von capacity() nicht unmittelbar mit dem Wert max zu tun, wenn Du
vector<klasse> vec(max);machst. Im Gegenteil, wenn Du nun
vec.size();aufrufst, dann bekommst Du max zurück. Auch hier gilt, Deine klasse muss einen Def.Konstr. haben, weil beim Initialisieren des Vectors sofort max Objekte vom Typ klasse im Vektor gespeichert werden.