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.