|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
C: tipo di ritorno, funzione
Vi chiedo aiuto!
è una vita che cerco questa cosa ma non la trovo da nessuna parte.... Vorrei, per pulizia di codice, far tornare come tipo di ritorno e sottolineo come tipo di ritorno un bel puntatore ad una funzione ma non ci riesco e non ne conosco la sintassi corretta. Logicamente non voglio far tornare da una procedura un puntatore a void per poi fare il cast... sapete per caso come si può fare? negli argomenti una funzione la possiamo definire così void (*nome_funz) (parametri) ma nel tipo di ritorno come si può fare? PS. non ho detto il linguaggio... logicamente come da titolo è il C |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi dichiarare un tipo, genere:
typedef void (*fun)(int); e poi usare quello come tipo restituito dalla funzione che restituisce una funzione: fun getFun() { ... } Credo si possa fare anche senza typedef ma è più che altro un sospetto perchè l'esatta sintassi al momento mi sfugge.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
Si ripiegherò sul tipedef comunque se qualcuno dovesse trovare come si scrive metta in risalto
ehm.... lo metta in risalto qui |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ecco un esempio senza usare typedef:
Codice:
#include <stdio.h>
void myfunc (int a)
{
printf ("%d\n", a);
}
void (*getFunc(void)) (int)
{
return myfunc;
}
int main (void)
{
void (*f)(int);
f = getFunc ();
f (123);
return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
Si effettivamente risulta un po troppo criptico e quindi poco manutenibile
Seguirò il consiglio grasssie |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Giusto per curiosità... a che serve fare una cosa del genere? Che applicazioni ha?
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: May 2007
Città: Roma
Messaggi: 93
|
Beh ho una applicazione che per struttura deve utilizzare il design pattern Command, che in C ho implementato rilasciando dinamicamente un puntatore ad una funzione
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Il concetto quindi è quello di avere un tipo di dato che possa rappresentare, per dirla in modo semplice, un "comportamento". Nel mio esempio sopra, getFunc ritorna sempre lo stesso puntatore a funzione. Ora immagina che ci siano più funzioni (che fanno cose diverse/in modo diverso) con lo stesso prototipo e che getFunc determini quale di queste ritornare in base ad altre condizioni. Questo il main() non lo sa, riceve solamente un puntatore a funzione ("un comportamento") che poi utilizza. Se non è chiaro, posso spiegare con un esempio.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:24.




















