2010-01-30 5 views
3

Sur la page 175, paragraphe 1 de Effective C++ Meyers a ceci à dire au sujet de foncteurs généralisées et obligatoire:boost :: function et boost :: bind sont cool, mais qu'est ce qui est vraiment cool à propos de boost :: lambda?

Je trouve ce que tr1::function vous permet de faire tellement incroyable, ça me fait tout Tingle plus. Si vous n'êtes pas picotement, il peut être parce que vous êtes à regarder la définition de ... et je me demandais ce qui se passe avec le ....

Et je suis d'accord avec lui et se lier fonction. À propos de lambda, Eh bien, je comprends ce que lambda fait et comment ça se passe, mais quelqu'un peut-il publier un extrait de livre ou un résumé verbal expliquant pourquoi Lambda est censé (selon la terminologie de Meyers) faire sauter mes chaussettes? Je demande parce que chaque zone de C++ où la syntaxe d'espace réservé est utilisée me semble un hack (oui, j'en connais assez sur la méthode fonctionnelle, alors s'il vous plaît pas de base), je suis d'accord avec la façon dont bind et MPL; Cependant, dans le cas de lambda, je veux juste que cela soit justifié pour que je puisse décider du temps que je devrais entrer dans mon répertoire.

- modifier -

This SO answer mentionne la création d'un inline foncteur en utilisant la syntaxe juste placedholder, il mentionne l'utilisation avancée, ce qui est probablement ce que je suis après ... dans l'utilisation avancée est-il encore juste inline création de foncteurs?

+3

Avez-vous lu la documentation de BLL? Il y a des tonnes d'exemples qui m'ont bouleversé la première fois que je l'ai lu. E.g: 'sort (a, b, _1 <_2);'. Et puis chercher SO. – dirkgently

+0

(+1) Oui, j'ai fait (au moins les 10 premières pages) - et je comprends cette forme d'utilisation. Est-ce que c'est ça? –

+3

Lambdas est tout au sujet de la création en ligne de fonctions anonymes et Boost.Lambda vous a donné des outils pour le faire avant l'inclusion de C++ 0x lambdas a même été discuté - donc je ne dirais pas "c'est tout?" *. * (hé, ne réclame pas mon +1;) * –

Répondre

4

Sur la base des commentaires laissés ci-dessus, et le lien dans la question, voici la réponse que je l'accepte (communauté wiki):

  1. Boost.Lambda remplit le but de la création de foncteur en ligne (c'est le terme que j'aime). Cette fonctionnalité peut être remplie par Function + Bind, mais elle est plus verbeuse qu'elle ne devrait l'être, et pour les foncteurs simples, cela n'est pas nécessaire - par exemple, le tri montré dans les commentaires ci-dessus.

  2. Il y a évidemment un chevauchement sémantique entre la paire Bind Fonction et Lambda - c'est un artefact historique, et parce que Lambda a sa raison d'être , il existe dans Boost.

0

Qu'est-ce que « cool » à ce sujet est que, comme boost foreach et paramètre boost, injecte/étend la syntaxe en C++ qui est pas dans la langue, à savoir qu'il émule les fonctions anonymes directement en tant que paramètres .

+1

Ce qui devrait faire une merveille, pourquoi utiliser C++ dans ce cas du tout ... – ima

+1

Eh bien, l'alternative serait d'écrire votre propre compilateur avec votre propre langage inventé. –

+0

Vous regardez cela de la mauvaise façon ima, ce n'est pas pourquoi utiliser C++ du tout, c'est pourquoi n'est-ce pas encore partie de la syntaxe C++. Les expressions C++ 0x lambda sont vraiment cool, mais elles ne sont qu'un petit pas vers les itérateurs pris en charge par le compilateur et l'itération sur eux. – Blindy

Questions connexes