puntatori a funzioni

Ciao ragazzi, stò cercando una piccola info, su arduino esistono i puntatori a funzione ? perchè sto creando una piccola libreria per arduino e mi servirebbe sapere se l'utente ha implementato o meno alcune funzioni. Grazie!

Si ci sono, funzionano esattamente come quelli in C. Ciao

Grazie mille!!!! sono molto piu sollevato!! ;)

MGuruDC: Si ci sono, funzionano esattamente come quelli in C.

Giusto per estendere il concetto, nulla vieta di usare all'interno di uno sketch funzioni scritte in C ANSI, il che include anche i puntatori di funzioni e tutto quello che normalmente si può fare in C entro i limiti ammessi dal compilatore, nel caso specifico è il GCC con le librerie di cross compiling per AVR.

raaden: Ciao ragazzi, stò cercando una piccola info, su arduino esistono i puntatori a funzione ? perchè sto creando una piccola libreria per arduino e mi servirebbe sapere se l'utente ha implementato o meno alcune funzioni. Grazie!

scusa, ma non risparmieresti un sacco di grattacapi usando le classi?

beh con un puntatore a funzione posso controllare se una classe è stata implementata o meno, amenochè non esista qualcosa di simile ai delegati non so quanto una classe mi sia utile :wink:

?? le classi in pratica sono delle struct che contengono, oltre che variabili, puntatori a funzioni... oltre che molte altre chicche.

se spieghi bene quello che vuoi fare... credo ti serva l'overloading dei metodi

infatti, essendo una classe un struct con dentro dei puntatori a funzione meglio usare subito i puntatori a funzioni... quello che devo realizzare è una libreria-wrapper per arduino che riceve in input una stringa da wifly o ethernet parsi la stringa e in base al contenuto di questa stringa richiami o meno alcune funzioni che poi l'utente deve implementare..

beh aspetta non è "solo"... per esempio, per quello che vuoi fare, tu crei la classe base e poi l'utente la estende, con le funzioni da implementare chiamate "astatte", in modo da obbligare l'implementazione. Di solito si fornisce una anche classe che implementa la classe vituale non facendo niente, sopratutto se le funzioni astratte sono molte ma se ne usano poche.

Però probabilmente i puntatori a funzioni sono più intuitivi per i novellini, che non sono costretti a estendere la tua classe :)

certo, il top sarebbe realizzare un override dei metodi con l'implementazione della classe, ma giustamente è più facile dire importa questa classe e scrivi questo metodo per fare questo. Per curiosità come realizzo un implementazione qui su arduino? Grazieee ;) spero vi piaccia il nostro progetto di integrazione tra arduino e iOS ;)

in che senso implementazione?

hai in mano tutti i costrutti C e alcuni costrutti C++

ho appena visto questo

http://www.arduino.cc/en/Hacking/LibraryTutorial

non sono molto esperto di arduino e pensavo fosse un po' diverso dal c e c++ normale..;) grazie per le dritte, alla fine opto per le classi, sono la procedura migliore a mio parere..

Thanks!

occhio che quella è una classe, non una libreria

penso che la procedura corretta da seguire sia questa, però alcune cose mi sono dubbie... crea la classe debuggable e sensor, e fin qui ok. Crea la classe TemperatureSensor che eredità da sensor e debuggable e poi? significa che in temperature sensor posso fare l'override di debug?

in java puoi fare l'override delle calssi dichiarate protected o public.

la differenza tra protected e public, è che protected possono essere chiamate solo internamente alla classe, le public possono essere chiamate da chiunque.

Infine ci sono le private che possono essere chiamate solo dalla classe stessa (anche se sottoclasse), ma non possono essere overridate.

In pratica tu creerai delle funzioni private che effettuano il lavoro vero e proprio, che al loro interno chiamano una classe public nonchè abstract(e di conseguenza tutta la calsse va dichiarata abstract), che sarranno quelle che l'utente sovrascrive con la sua classe, che deve estendere la tua classe. Il vantaggio è che il funzionamento interno della classe rimane assolutamente oscura e automatica all'utente, salvo che esso non vada a guardare i sorgenti, ecomunque può lavorare con i puntatori :)