ciao .
Ho scritto questa breve classe:
codice:#pragma once #include <string> using namespace std; class CBase { public: CBase(void); ~CBase(void); string name ; string Lastname; virtual void call(CBase b); virtual void call2(CBase b); }; #include ".\base.h" #include <string> using namespace std; CBase::CBase(void) { } CBase::~CBase(void) { } class CProva: public CBase { public: CProva(void); ~CProva(void); }; void CBase::call(CBase b) { int i = 0; i= 1; } void CBase::call2(CBase b) { int i = 0; i= 1; } int main() { typedef void (CBase::*DerivedClassFunction)(CBase ); DerivedClassFunction my_memfunc_ptr; my_memfunc_ptr = &CBase::call; std::map<std::string, DerivedClassFunction> m1; m1["giugio"]= &CBase::call; my_memfunc_ptr = &CBase::call; m1["giugio2"]= &CBase::call2; CBase y; y.name = "giuseppe"; y.Lastname = "ferrari"; CBase p; p.name = "pippo"; p.Lastname ="giugio"; (y.*my_memfunc_ptr)(p); // Map the functions to the names /*m["foo"] = &foo; m["bar"] = &bar;*/ // Display all of the mapped functions /*std::map<std::string, std::string (*)()>::const_iterator it = m.begin(); std::map<std::string, std::string (*)()>::const_iterator end = m.end();*/ std::map<std::string, DerivedClassFunction>::const_iterator it = m1.begin(); std::map<std::string, DerivedClassFunction>::const_iterator end = m1.end(); while ( it != end ) { DerivedClassFunction der = it->second; (y.*der)(p);//--> richiamo la funzione (y.*der)(y);//--> richiamo la funzione ++it; } }
ecco , vorrei renderla generica , nella mia applicazione tutte le classi derivano da una CIfcBase e tutte le funzioni SetVarMEmbroIfc hanno di return type void e con parametro(CIfcBase), tutte.
quindi ho stessi parametri e stesso type ,E' possibile creare una mappa di quaste funzioni e richiamarle all' occorrenza?
quello che cambia è l'object che contiene la variabile membro , ma anche questo è di tipo CIfcbase.
Grazie.

Rispondi quotando