ciao.
Ho un puntatore a void *void vFunction che punta ad una funzione che come parametro accetta una stringa .
Come faccio ad invocare la funzione?
in vc++ win.
Grazie.
ciao.
Ho un puntatore a void *void vFunction che punta ad una funzione che come parametro accetta una stringa .
Come faccio ad invocare la funzione?
in vc++ win.
Grazie.
Castalo ad un puntatore a funzione corretto.
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Vorrei richiamare una funzione come se fosse generica ,dopo avergli assegnato un puntatore da dentro una classe , non è possibile?
ho un codice cosi:
adesso vorrei che se estraggo il puntatore dalla mappa con un indice string posso invocare la funzione puntata dal puntatore a void nella mappa dal main o comunque dall'esterno.codice:class Derived{ void Derived::initialize() { static registerInFactory<Base, Derived, Base::BASE_KEY_TYPE> registerMe("xxx",(void*)xxx);//registro il puntatore a funzione e lo metto in una mappa tralascio il codice //void *v = mappa["NomeFunzione"]; //invoco la funzione??????????? } void Derived::xxx(std::string strData) { afxmessagebox.... } }
E' possibile?
Spiego meglio.
Sto effettuando un parser sax per xml , ho fatto in modo che quando il parser trova un determinato tag di struttura xml nell' open tag di sax instanzio una classe del tipo di quel tag, successivamente per ogni tag dato nel close chiamo una funzione che automaticamente mi setta i dati.
In questa maniera leggol'xml e lo converto in classi e dati.
Devo pero' riuscire a registrare le classi e le funzioni .
Per le classi ci sono riuscito , come da post precedente ho un puntatore a funzione statica di un pattern abstract factory.
Per le funzioni no , vorrei quindi riuscire a creare un meccanismo di registrazione delle funzioni (mettere in una mappa i puntatori a funzione)per poterle richiamare automaticamente dall classe creata .
Una roba del genere:
CurrentClass.callFunction("data");
simile alla reflection.
Con un metodo statico sono riuscito a creare questo meccanismo , ma non per un metodo non statico , una funzione membro normale per intenderci.
Che differenza c'è?
co,e posso salvare un indirizzo ad una funzione in una mappa e richiamarla all'occorrenza?
grazie.
Vedi la seguente:
Per giocare coi puntatori membro, il C++ fornisce la funzione template std::mem_fun ed il tipo template std::mem_fun_t, ad esempio:
http://forum.html.it/forum/printthre...readid=1180516
fuori dalla funzione
dentro la funzione:codice:typedef void func(std::string* s);
quando inizializzi i valori di "mappa" devi usare puntatori a funzioni globali e non ai metodi di una classe, altrimenti il discorso è + complicato.codice:void* ptr = mappa["NomeFunzione"]; func *f = (func*)ptr; f(null); // settare l'argomento corretto
Grazie , ma io sto cercando qualcosa che instanzi un oggetto derivato da una classe base dal nome della classe e ne scateni le funzioni dal nome delle funzioni.
In pratica:
pC1 =factory::instance().Create("CClasse1");
pC1->Invoke("funzionexxx");
non credo che esista una cosa del genere in c++.
dovresti scriverti tu la factory che in base al nome crea l'istanza giusta e chiama il metodo giusto.
O passi al .NET che nel namespace Reflection ha proprio questa robaccia che ti serve.Originariamente inviato da giuseppe500
Grazie , ma io sto cercando qualcosa che instanzi un oggetto derivato da una classe base dal nome della classe e ne scateni le funzioni dal nome delle funzioni.
In pratica:
pC1 =factory::instance().Create("CClasse1");
pC1->Invoke("funzionexxx");
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
E' illegale fare un cast da puntatore a funzione a void* e viceversa.Originariamente inviato da bitman
codice:void* ptr = mappa["NomeFunzione"]; func *f = (func*)ptr; f(null); // settare l'argomento corretto
http://www.parashift.com/c++-faq-lit....html#faq-33.7
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.