Les Functors en C++

Qu'est-ce qu'un Functor ?

Un functor est un type de structure de données ou d'objet qui peut être utilisé comme une fonction. Cela est possible grâce à la surcharge de l'opérateur de fonction d'appel (()). Pour que cet opérateur puisse fonctionner, il est nécessaire de s'assurer que l'accès public est accordé à sa surcharge. Les functors peuvent contribuer à simplifier certaines tâches et améliorer l'efficacité dans divers scénarios.

Syntaxe des Functors

Pour qu'une classe soit qualifiée de functor, elle doit contenir la structure suivante :

class MaClasse {
  public:
    type operator()(...) {
      // Corps de la fonction
    }
};

Ici, type représente le type de données à retourner, operator() surcharge l'opérateur de fonction d'appel () et (...) désigne les paramètres nécessaires pour exécuter le corps de la fonction.

Utilisation d'un Functor

Pour faire appel à un functor, on commence par créer une instance de la classe correspondante, puis on l'utilise avec les arguments requis :

MaClasse maClasse;
maClasse(...);

Exemple de Functor

Considérons le code suivant, qui surcharge l'opérateur de fonction d'appel de la classe Bonjour pour afficher Bonjour le monde ! un nombre d'itérations défini par l'argument (int fois). Ce code illustre comment créer un functor à partir d'une telle classe :

#include 
using namespace std;

class Bonjour {
  public:
    void operator()(int fois) {
      for (int i = 1; i <= fois; i++)
        cout << "Bonjour le monde !" << endl;
    }
};

int main() {
  Bonjour salute;
  salute(3);
  return 0;
}

L'exécution de ce programme produira la sortie suivante :

Bonjour le monde !
Bonjour le monde !
Bonjour le monde !