web-dev-qa-db-fra.com

Que sont les fonctions d'assistance en C++?

J'essayais de comprendre les fonctions d'assistance en C++ à partir de The C++ Programming Language by Bjarne Stroustrup. Mais le livre n'a rien expliqué à ce sujet et le but de l'utiliser en classe. J'ai essayé de le rechercher sur le Web et trouvé this . J'en ai compris le sens, mais je ne sais toujours pas quel est le véritable objectif des fonctions d'assistance, quand dois-je les utiliser et, dans l'ensemble, quelles sont les fonctions d'assistance?

24
Sumit Gera

"fonction d'assistance"n'est pas un terme que l'on trouverait dans une norme, il n'a pas non plus de définition exacte ... la mention standard "classe d'assistance" ou "modèle d'assistance" quelques fois pour faire référence à une classe, qui n'est pas censée être instanciée par les utilisateurs finaux mais fournit une fonctionnalité utile utilisée en interne dans une autre classe.

Les fonctions d'assistance sont (ce que je pense que la plupart des gens veulent dire quand elles le disent) sont généralement des fonctions qui englobent des fonctionnalités utiles que vous allez réutiliser, le plus souvent encore et encore. Vous pouvez créer des fonctions d'assistance destinées à être utilisées à différentes fins ... 

Un exemple pourrait être une fonction de conversion de tout type, par exemple une fonction convertissant std::string codé sur plusieurs octets en std::wstring:

std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo( size_needed, 0 );
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}
27
LihO

Il existe une excellente définition d'une fonction d'assistance à partir de CppCoreGuidline :

Une fonction d'assistance est une fonction (généralement fournie par le rédacteur d'une classe) qui n'a pas besoin d'accéder directement à la représentation de la classe, mais qui est considérée comme faisant partie de l'interface utile de la classe. En les plaçant dans le même espace de noms que la classe, leur relation avec la classe est évidente et leur permet d'être trouvées par recherche dépendante d'arguments.

Pour plus d'informations, vous pouvez consulter le paragraph avec un exemple clair, à partir duquel la citation supérieure est extraite.

5
Oleh Holovko

Un exemple pourrait être la fonction de validation d'entrée que vous allez réutiliser dans toute la fonction principale. Supposons que vous avez un programme qui demande l'âge de l'utilisateur, puisque age est un entier> 0, vous aurez besoin d'une fonction distincte qui prend en charge le "cin >> users_age;". Si l'entrée satisfait à l'instruction de condition, continuez, sinon demandez à l'utilisateur de ressaisir son âge.

Ceci est juste un exemple de "fonction d'assistance". Corrigez-moi les lecteurs si je me trompe. Merci!

1
Ben10_nf.

Les "fonctions d'assistance" sont décrites dans le livre de Bjarne Stroustrups, que je lisais à ce sujet hier. Selon Stroustrup, une bonne conception de classe devrait limiter au minimum le nombre de fonctions implémentant une classe. Vous ne voulez pas avoir 50 fonctions dans une classe, selon Stroustrup. Au lieu de cela, vous utilisez des "fonctions d'assistance" qui utilisent l'interface de classe (appelez les fonctions membres). Ils pourraient peut-être (pas sûr de cela) être définis dans un espace de noms partagé pour donner un sens à leur "relation". Vous pouvez trouver le paragraphe dans le livre au chapitre 9 section 9.7.5

0
user9528449