Maison >développement back-end >C++ >Comment concevoir des objets de fonction STL personnalisés pour améliorer la réutilisabilité du code ?

Comment concevoir des objets de fonction STL personnalisés pour améliorer la réutilisabilité du code ?

王林
王林original
2024-04-25 14:57:01661parcourir

L'utilisation d'objets fonction STL peut améliorer la réutilisabilité, y compris les étapes suivantes : Définir l'interface de l'objet fonction (créer une classe et hériter de std::unary_function ou std::binary_function) Surcharger l'opérateur() pour définir le comportement de la fonction dans l'opérateur surchargé ( ) Utilisez des objets de fonction via des algorithmes STL (tels que std::transform)

如何设计自定义的 STL 函数对象来提高代码的可重用性?

Utilisez des objets de fonction STL pour améliorer la réutilisabilité du code

Les objets de fonction STL sont une classe appelable, qui permet de combiner la programmation fonctionnelle avec la programmation orientée objet . En encapsulant la logique du code dans des objets fonction, vous pouvez améliorer la réutilisabilité et l'encapsulation.

Étapes :

  1. Définir l'interface de l'objet fonction : Créer une classe qui hérite de std::unary_function ou std::binary_function. Surchargez operator() pour définir le comportement de la fonction.
  2. std::unary_functionstd::binary_function。重载 operator() 以定义函数行为。
  3. 实现函数逻辑:在重载的 operator() 中,实现所需的功能。
  4. 使用函数对象:可以使用像 std::transformstd::for_each 这样的 STL 算法来应用函数对象。

示例:

假设我们想要创建一个函数对象来计算字符串的长度:

class StringLength {
public:
    int operator()(const std::string& str) {
        return str.length();
    }
};

int main() {
    std::vector<std::string> names = { "John", "Mary", "Bob" };

    std::vector<int> lengths;
    std::transform(names.begin(), names.end(), std::back_inserter(lengths), StringLength());

    for (int length : lengths) {
        std::cout << length << " ";  // 输出:4 4 3
    }
    std::cout << "\n";

    return 0;
}

在这个例子中,StringLength 类是一个函数对象,实现了计算字符串长度的逻辑。我们通过 std::transform 将它应用到字符串向量 names 上,将计算的长度存储到 lengths

Implémentez la logique des fonctions :

Dans le operator() surchargé, implémentez les fonctions requises.

🎜Utilisation d'objets fonction : 🎜Vous pouvez utiliser des algorithmes STL comme std::transform ou std::for_each pour appliquer des objets fonction. 🎜🎜Exemple : 🎜🎜🎜Supposons que nous souhaitions créer un objet fonction pour calculer la longueur d'une chaîne : 🎜rrreee🎜Dans cet exemple, la classe StringLength est un fonction Objet qui implémente la logique de calcul de la longueur d'une chaîne. Nous l'appliquons au vecteur de chaîne names via std::transform, en stockant la longueur calculée dans le vecteur lengths. 🎜🎜En utilisant des objets de fonction personnalisés, nous pouvons réaliser la réutilisation du code et appliquer facilement la logique de calcul de la longueur des chaînes à différentes collections de chaînes. 🎜

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn