mercoledì, gennaio 10, 2007

un funtore

Ecco un esempio di funtore banale.
Essendo banale, e' stato implementato inline, cioe' con tutto il codice scritto dentro funtore.h. E' chiaro che:


  • il nome della classe e' arbitrario, non necessariamente funtore
  • l'operator() puo' prendere in ingresso quanti e quali argomenti si voglia e restituire un qualunque oggetto, come un qualunque metodo della classe
  • per funzioni piu' complicate potrebbero essere necessari costruttori e distruttori, l'operator() piu' sofisticato etc, quindi diventa conveniente scrivere l'implementazione nel .cc
  • si faccia attenzione al fatto che operator() e' il nome dell'operatore, quindi poi ci vogliono altre due parentesi tonde con gli argomenti


#ifndef funtore_H
#define funtore_H

#include <iostream>

class funtore
{
public:

funtore () {} ;
~funtore () {} ;

void operator() () {std::cout << "fatto! gia fatto??" << std::endl ;}

private:

};

#endif


Il funtore si utilizza dentro al codice di test creandolo come un oggetto (perche' e' un oggetto) ed usando l'operator() come una funzione, come si vede dall'esempio.
In questo caso e' un operatore banale, che non ritorna nulla, tuttavia si utilizza come una funzione.
Come oggetto, un funtore puo' essere definito, ne si possono definire puntatori, si puo' mettere in vettori e mappe, puo' essere restituito da una funzione, puo' essere passato come argomento ad una funzione (i metodi sono funzioni).

#include "funtore.h"

int main ()
{
// creazione dell'oggetto funtore
funtore oggettoDiTest ;

// utilizzo dell'oggetto di test
oggettoDiTest () ;

return 0 ;

}

Nessun commento: