Glocke hat geschrieben:Hi, in einer MVC-artigen Anwendung möchte ich vom Controller an das Model einige Daten und eine "Arbeitsanweisung" schicken. Jedoch möchte ich keine Model-Methode aufrufen,
Geht das ganze über's Netz? In dem Fall musst Du "gepackte", komplette Objekte verschicken, also keine Zeiger auf Strings oder virtuelle Funktionen...
Glocke hat geschrieben:Code: Alles auswählen
typedef unsigned char EventID;
extern const EventID NO_EVENT = 0;
struct Event {
EventID event_id;
};
Nun habe ich folgendes "Problem": Ich will weitere Events vom Basisevent ableiten im Sinne
Code: Alles auswählen
extern const EventID DO_FOO = 1;
struct Foo: Event {
int data;
Foo() { this->event_id = DO_FOO; }
};
Damit kann ich Foo als Event in mein EventPipe geben und auf der anderen Seite (in Form eines allgemeinen Events) rausholen. Allerdings muss ich dann (wenn ich auf meine Daten zugreifen will) das Event in seine richtige Form casten. Dazu verwende ich diese "event_id":
Code: Alles auswählen
if (unknown_event.event_id == DO_FOO) {
Foo* known_event = (Foo*)unknown_event; // hab es nicht getestet (das ganze an der stelle noch ein gedankenexperiment^^)
// handle known event
}
So und jetzt (wie immer am Ende meiner Posts xD) meine Frage: Wie mach ich das "richtig"?
Punkt 1: Du gibst Event einen Konstruktor, der die Initialisierung von event_id verlangt, also
muss jede Ableitung Event initialisieren.
Punkt 2: Wieso void*? Wieso ist das Model noch unbekannt? Oder ist es eigentlich ein struct BaseModel *, das Du noch nicht definiert hast.
Ich glaube, ich verstehe die Frage noch nicht... falls doch, denke ich, das Yoghurt da schon richtig liegt, außer dass die Klasse eben nicht abstrakt sein darf, sondern eben wie oben beschrieben alle Informationen beinhalten musst, wie Du es mit der event_id ja auch bereits richtig machst.
Pack die Konstante noch static in den Namensraum, damit Du mit den Ids nicht den globalen Namensraum belegst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.