Non mi sembra il forum giusto ma ci provo.
Ho creato un DGC (dynamic gui creator) usando qt. È un sistema per creare gui qt senza dover scrivere tutto il codice ma solo xml files per gli oggetti e un plugin c++ per le azioni. Funziona benissimo ma adesso lo sto migliorando.
Dovendo scrivere 2 volte lo stesso identico codice per gestire un phonebook in 2 diverse gui, ho pensato bene di creare un plugin phonebook.
Avendoci preso gusto, ho scritto altri plugins per gestire altre cose ed ora ho il seguente problema:
il plugin che gestisce l'update della risposta di un server ha bisogno di informazioni dal phonebook così come altri plugins hanno bisogno di info da parte di altri plugins. Insomma i plugins dovrebbero comunicare tra loro in qualche modo.
Ho teoricamente (non l'ho ancora scritto perchè sto lavorando anche su altro) risolto in questo modo:
- ho creato un prototipo di funzione che tutti i plugins dovranno usare (definito nell'interfaccia dei plugins - pure abstract class).
Codice:
typedef boost::function< QStringList (QStringList&) > DGCPluginFunc;
- ho creato una mappa nome-funz/funz
Codice:
typedef std::map<QString, DGCPluginFunc> MapDGCPluginFunc;
- ogni plugin una volta istanziato deve chiamare la SetAvailableFunctions passando via mappa le proprie funzioni pubbliche.
- ogni plugin una volta istanziato deve chiamare la SetNeededFunctions passando via mappa le funzioni di cui ha bisogno.
Il plugin loader, finito il caricamento dei plugins, dovrà controllare che ci siano tutte le funzioni, univoche, di cui i vari plugins hanno bisogno.
Se tutto è a posto, passa la mappa completa di tutte le funzioni ai plugins ed il programma può continuare.
Quando un plugin deve chiamare una funzione, la esegue via mappa (es. mapFunz["NOME_FUNZ"](params); )
Boh, è la prima volta che lavoro con comunicazione tra plugins, qualcuno ha qualche dritta da darmi ?
ho come la sensazione che ci sia qualche soluzione migliore...