Question

Quel pourrait être le meilleur moyen de commencer à programmer en utilisant les bibliothèques boost lambda.

Était-ce utile?

La solution

Restant dans les limites du langage C ++ et des bibliothèques, je vous suggèrerais tout d'abord de vous habituer à la programmation à l'aide de modèles de fonction d'algorithme STL. L'un des usages les plus courants de boost :: lambda est de remplacer les classes de foncteurs par des expressions en ligne. en ligne.

La documentation de la bibliothèque vous donne un exemple initial de son utilité:

for_each(a.begin(), a.end(), std::cout << _1 << ' ');

std::cout << _1 << ' ' produit un objet fonction qui, lorsqu'il est appelé, écrit son premier argument dans le flux cout. C’est quelque chose que vous pourriez faire avec une classe de foncteurs personnalisée, std::ostream_iterator ou une boucle explicite, mais boost :: lambda gagne en concision et probablement en clarté - du moins si vous êtes habitué aux concepts de programmation fonctionnelle.

Lorsque vous utilisez (trop) la STL, vous vous retrouvez attiré par boost :: bind and boost :: lambda. C'est très pratique pour des choses comme:

std::sort( c.begin(), c.end(), bind(&Foo::x, _1) < bind(&Foo::x, _2) );

Avant d’arriver à ce point, pas tellement. Utilisez donc les algorithmes STL, écrivez vos propres foncteurs, puis traduisez-les en expressions intégrées à l'aide de boost :: lambda.

D'un point de vue professionnel, je pense que la meilleure façon de commencer avec boost :: lambda est de comprendre et d'accepter l'utilisation de boost :: bind. L'utilisation d'espaces réservés dans une expression boost :: bind semble beaucoup moins magique que & "Naked &"; boost :: lambda espaces réservés et trouve une acceptation plus facile lors de la révision du code. Aller au-delà de la stimulation de base: l'utilisation de lambda est susceptible de vous faire chagriner de la part de vos collègues, sauf si vous êtes dans un magasin C ++ ultra-moderne.

Essayez de ne pas exagérer - il y a parfois des endroits où une for - boucle vraiment est la bonne solution.

Autres conseils

Dépend. Êtes-vous déjà bien familiarisé avec les concepts de la programmation fonctionnelle? Sinon, je vous suggérerais de commencer dans un langage conçu pour la programmation fonctionnelle plutôt que dans un langage procédural avec des fonctions fonctionnelles agrafées. Si vous n'êtes pas habitué à coder dans un style fonctionnel (ce n'est pas nécessairement plus dur , mais c'est vraiment différent), alors vous passerez plus de temps à lutter contre la syntaxe et pas assez de temps à apprendre à faire avancer les choses. .

Quant à savoir par où commencer, j’ai coupé mes dents fonctionnelles sous Scheme, mais il ya beaucoup de bonnes options.

Si vous travaillez avec un compilateur relativement récent, vous pouvez utiliser boost. Si ce n'est pas déjà sur votre ordinateur, installez-le (sudo apt-get installez libboost-dev sur unbuntu, récupérez les fichiers binaires sur boost.org si vous êtes sur Windows). Lisez les doc , puis examinez vos documents existants. code pour les situations où vous pourriez les utiliser. Avez-vous beaucoup de duplication de code qui pourrait être éliminée si vous paramétriez une fonction avec un petit morceau de code, par exemple?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top