Les objets de fonction, ou fonctors, en C sont des cas d'une classe qui définit l' operator()
. Cela permet à un objet d'être utilisé comme s'il s'agissait d'une fonction. Pour utiliser un Functor, vous définissez d'abord une classe avec une méthode operator()
, puis créez des instances de cette classe. Voici un exemple simple pour illustrer l'utilisation:
<code class="cpp">#include <iostream> class Multiply { public: int operator()(int x, int y) { return x * y; } }; int main() { Multiply mul; // Create a functor instance std::cout </iostream></code>
Dans cet exemple, Multiply
est une classe Functor qui a une méthode operator()
qui prend deux entiers et renvoie leur produit. Lorsque vous créez une instance mul
de Multiply
, vous pouvez l'appeler comme une fonction avec mul(3, 4)
, qui produit 12
.
Il y a plusieurs avantages à utiliser des fonds sur des fonctions régulières en C:
std::sort
ou std::find_if
, peuvent prendre des fonds comme arguments, ce qui les rend plus flexibles et puissants. Pour implémenter un fonctor personnalisé en C, vous devez définir une classe avec une méthode operator()
. Voici un exemple d'un foncteur personnalisé qui compte le nombre de fois où il est appelé:
<code class="cpp">#include <iostream> class CallCounter { private: int count; public: CallCounter() : count(0) {} void operator()() { count; std::cout </iostream></code>
Dans cet exemple, CallCounter
est un fonctor personnalisé qui conserve une variable de count
privé. Chaque fois que le Functor est appelé, il incrémente le nombre et imprime le nombre actuel.
Les fonds sont largement utilisés dans la programmation C à diverses fins. Voici quelques cas d'utilisation courants:
Tri personnalisé : les fonds peuvent être utilisés avec std::sort
pour définir les critères de tri personnalisés. Par exemple, vous pouvez trier un vecteur d'objets en fonction d'un attribut spécifique.
<code class="cpp">struct Person { std::string name; int age; }; struct SortByAge { bool operator()(const Person& a, const Person& b) { return a.age people = {...}; std::sort(people.begin(), people.end(), SortByAge());</code>
Personnalisation de l'algorithme : de nombreux algorithmes de bibliothèque standard, tels que std::find_if
, std::accumulate
et std::transform
, peuvent prendre des fonds pour personnaliser leur comportement.
<code class="cpp">std::vector<int> numbers = {1, 2, 3, 4, 5}; auto even = std::find_if(numbers.begin(), numbers.end(), [](int x) { return x % 2 == 0; });</int></code>
Ces exemples illustrent comment les fonds peuvent améliorer la flexibilité et l'expressivité du code C, ce qui en fait un outil puissant dans la programmation C moderne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!