|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
[C++] Array di puntatori a funzione
Salve ragazzi, ho un problema nel creare un array di puntatori a funzione. Partendo dalla definizione del tipo :
typedef float (*PointerFunction)(float); Come creo ed inizializzo un array dinamico di puntatori a funzione, le quali funzioni prendono e restituiscono un float? Grazie. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
float func1 (float f)
{
....
}
float func2 (float f)
{
....
}
...
PointerFunction *pf = new PointerFunction[2];
pf[0] = func1;
pf[1] = func2;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
Così ho provato, però mi dice :
"Argument of type float(NomeClasse:: )float does not match float(*)(float) "; La funzione membro alla quale voglio collegarlo è del tipo float Nomefunzione(float); Quindi non capisco perchè dica questa cosa. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Sono un po' "arruginito" per il C++ ma credo che non si possa fare. Si potrebbe fare, se non sbaglio, se la funzione membro è 'static'.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
che si dichiara con: typedef float (NomeClasse::*PointerFunction)(float); |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
Ah ecco,quindi dovrei dichiarare le funzioni static. Però in realtà non è necessario che lo siano,per quanto riguarda il design dell'applicazione metterei static solo per fare questa cosa.
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
No mi correggo, si può fare:
Codice:
class Prova
{
public:
void test (void) { cout << "hello" << endl; }
};
typedef void (Prova::*ptr) (void);
Codice:
ptr p = &Prova::test; Prova prova; (prova.*p) (); (io comunque eviterei menate del genere ..... anzi eviterei del tutto il C++
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Lo puoi fare anche se i metodi non sono static, ci mancherebbe, se però imposti il puntatore ad un metodo di una classe non istanziata, non c'è try/catch che ti salvi.
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Infatti ... mi sono ricordato, grazie.
Io comunque tifo per Java ... non per C++.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
Allora ragazzi, adesso ho il problema di invocare queste funzioni!
Ho provato così : Puntatoreclasse->array_funzioni[0](float di ingresso); Ma non funziona. Come si invoca? Tenete conto che lo sto invocando da un'altra classe, non da quella da cui l'ho definito. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Vedi il mio esempio sopra.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
Provato anche questo, ma nulla :
Codice:
(Puntatoreclasse->*array_punt_funzione[0])(ingresso) |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Inoltre si può scaricare l'header fastdelegate da codeproject che rende la sintassi più leggibile e decisamente più comoda da usare. Assegni i puntatori a metodo con MakeDelegate(this,&NomeClasse::Metodo) e puoi usare indifferentemente puntatori a funzione e a metodo. |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6444
|
Ho risolto così :
Codice:
(Puntatoreclasse->* (Puntatoreclasse->array_punt_func[0]))(ingresso); |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:17.




















