Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Addons sollen Funktionalitäten in Klassen erweitern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.03.2008, 13:49 Uhr
FunnyDingo



Hallo zusammen,

kurze Zusammenfassung: ich habe eine Klasse user und für jeden User für eine Instanz davon erstellt. Ich habe eine Schnittstelle definiert die das laden von Libs als Plugin oder Filter ermöglicht. Diese Filter sollen jetzt die Möglichkeit bekommen die Funktionalitäten von Klassen (hier am Beispiel der User Klasse) zu erweitern. Ich sehe da nur eine Möglichkeit und würde das gerne von jemandem bestätigt oder wiederlegt haben:

Die Klasse bekommt zum einen eine Eigenschaft "plugin_vars". Sagen wir mal, das ist eine map<std::string, void*>. In dem Key wird der "Variablenname" den das Addon verwendet hinterlegt und Value der Pointer auf den Wert (den Typ muss das Addon dann kennen und entsprecend casten).

Außerdem müsste ich in die Funktionen, die von Addons beeinflusst werden können sollen, Hooks einbauen die einen Callback (ich glaube so nennt sich das dann, oder?) auf die entspreche Funktion im Addon macht. Das könnte mal wohl auch am besten über eine map<std::int, void()*> (ich hoffe das ist jetzt auch ein FunctionPointer) erledigt werden. Key ist ein int der für jede Funktion im Plugin eindeutig ist (der int sollte ja Speicher schoneneder sein als ein string) und der FunctionPointer verweißt auf die Funktion im Addon.

Ist das ein guter Ansatz oder denke ich hier in eine falsche Richtung?

Gruß,
Funny
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.03.2008, 16:48 Uhr
0xdeadbeef
Gott
(Operator)


Es gibt eine Reihe von Möglichkeiten, so etwas zu modellieren, je nachdem, wie die Plugins nachher benutzt werden sollen. Das Speichern von Funktionszeigern und zu übergebenden Variablen ist wohl eine Möglichkeit - im Übrigen ist die Syntax hier

C++:
std::map<int, void(*)(void*)>


...für eine map int -> Prozedur, die einen void* als Parameter akzeptiert.

Meine erste Idee wäre, eine Plugin-Basisklasse zu modellieren, von denen die Plugins dann ableiten, und ihre eigene Klasse über eine dynamisch nachladbare Funktion bei einer Factory registrieren - was aber die beste Lösung ist, lässt sich nicht sagen, ohne den use case zu kennen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.03.2008, 19:02 Uhr
FunnyDingo



Bei der User Klasse soll es dazu dienen, einen Eigenschaften zu erweitern. Ich nenne mal ein konkretes Beispiel:

Jeder User befindet sich in einem Raum (Räume ist ebenfalls Klassen). Nun gibt es einer "Datenverarbeitungsklasse" eine Methode, die den Wechsel eines Users in einem Raum realisiert. Es soll nun ein Plugin erstellt werden, dass beim Raumwechsel prüft, ob der User für diesen Raum gesperrt ist. Dazu müsste

a) Jedes User-Object mit einem neuen Member ausgestattet werden, der eine Liste der Räum enthält in denen er gesperrt ist (oder jede Raum bekommt eine Liste der gesperrten User) und
b) die Funktion aufgerufen werden, die dies prüft.
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: