Passaggio di un puntatore a metodo (error C2664)
Von: bhodi78@gmail.com [Profil]
Datum: 01.06.2008 23:33
Message-ID: <fbbebc1a-9936-42e9-89e6-a6f7e65500fa@26g2000hsk.googlegroups.com>
Newsgroup: it.comp.lang.c++
Datum: 01.06.2008 23:33
Message-ID: <fbbebc1a-9936-42e9-89e6-a6f7e65500fa@26g2000hsk.googlegroups.com>
Newsgroup: it.comp.lang.c++
Ciao non riesco a risolvere questo problema:
Ho una classe A (che non posso modificare) la quale ha un metodo "fun"
che prende un puntatore a funzione, io voglio chiamare questo metodo
da un oggetto B passandogli come argomento l'indirizzo di un metodo di
B "funStima". (questo che segue è un esempio semplificato della
situazione in cui mi trovo)
/*************** Classe A data non modificabile
**********************************/
class A{
int val1;
int val2;
public:
A():val1(10),val2(10){}
~A(){}
int fun(int (fun)(int a, int b)){
return((*fun)(val1,val2));
}
};
/*********** Classe B quella che sto scrivendo io che ***********
*************deve invocare il metodo "fun" di A passandogli ****
*************un proprio metodo ************************************/
class B{
public:
int res;
int k;
B(){res=0;k=11;}
~B(){}
int funStima(int a, int b){
res=(a+b+k);
return res;
}
int run(void){
A f;
return (f.fun(&B::funStima));
}
};
/*************************************************/
int main(){
B ma;
printf("%d",ma.run());
return 0;
}
/*************************************************/
Questo è l'errore che mi dà:
Error 1 error C2664: 'A::fun: cannot convert parameter 1 from 'int
(__thiscall B::* )(int,int)' to 'int (__cdecl *)(int,int)'
Una soluzione che ho trovato è quella di dichiarare "funStima" come
statica ed ovviamente anche "res" e "k". Ma questa soluzione non
è
molto pulita e mi chiedevo se c'era qualche soluzione migliore. Ed
eventualmente se si potesse modificare A come si potrebbe modificare
per fare in modo che invece di prendere un puntatore a funzione stile
C, possa prendere un puntatore ad un metodo?
[ Auf dieses Posting antworten ]