P
Big Brother schrieb:
void func_objectA ( ObjectA* object )
{
printf ( "%d\n", object->value );
}
void func_objectB ( ObjectB* object )
{
printf ( "%s\n", object->buf );
}
Hey, das gefällt mir! Sieht meiner Eventqueue sehr ähnlich, deren Draft basiert allerdings auf void*, damals hatte ich aber noch dooferweise eine Trennung von Datenlisten und Funktionslisten und mußte mir irgendeinen Blödsinn ausdenken, Datentypen zu parsen, bis mir irgendwann aufgefallen ist, daß es das gar nicht braucht.
stefan-tiger schrieb:
Korrigier mich wenn ich was falsches schreibe:
In deinem Code ist Klasse=Instanz und es gibt sie nur einmal. Und dieses eine mal ist auch noch zur Compile-Zeit und nicht zur Laufzeit angelegt.
Daher ist es in deinem Beispiel auch kein Problem die Adresse der "Klasse" abzufragen.
Deswegen vermeide ich bei C die Begriffe wie Klasse, Objekt und Instanz. Um Methoden und Daten zusammenzuschnallen brauchst Du entweder structs oder Klassen, trotzdem sind sie nicht dasselbe. Zur Compiletime ist eine struct auch nur ein abstraktes Gebilde, eine Definition, ob da ein Funktionspointer drin ist oder nicht. Und es ist völlig egal, ob Du die struct als Frame-element oder als Bestandteil einer Liste auf dem Heap anlegst, das Speicheranlegen erfolgt zur Runtime. Dann ist es aber immer noch nur ein Stück Speicher, das Du sinnvoll füllen solltest und der Funktionspointer typisiert das Ding eben auch erst zur Laufzeit. Erst damit ist das Ding "instantiiert".
Ergo Klasse != Instanz
stefan-tiger schrieb:
Ich möchte aber mehrere Instanzen zur Laufzeit anlegen.
Kannst Du ja, bis der Speicher voll ist. Jedes Listenelement ist eine Instanz.
stefan-tiger schrieb:
Wichtig ist mir hierbei das "typedef", denn eine Klasse in C++ belegt an sich noch kein Speicher und kann nicht als "lebendes Objekt" vendendet werden, das wird erst mit einer Instanz möglich (oder nicht?).
Na und, reitest Du deshalb auf dem typedef rum? Du kannst tausend structs deklarieren, sie nehmen zur Runtime kein einziges Byte weg. Der typedef ist nur eine Annehmlichkeit für Schreibfaule.
Daß der "Schlüssel" (nach BigBrother-Definition) passen muß, kann man positiv oder negativ sehen, ich bin bisher bei void * geblieben, ohne mich weiter zu verkopfen, weil ich in "Zeiger auf irgendwas" die Unverbindlichkeit habe, die mir so vorschwebte. Aber schön, sowas wieder aufgerollt zu sehen, ich werd' mich mal in einer ruhigen Minute nach Jahren unreflektierten Einsatzes über meinen Kram wieder hermachen und gucken, ob das was bringt.
Danke, B.B. für die Denkanstöße!