Question

Ces derniers temps, le support pour les lambdas dans VC2010 me passionne. Je commence lentement à saisir tout le potentiel de cette fonctionnalité pour transformer le C ++ en quelque chose de bien meilleur.

Mais j’ai ensuite réalisé que ce potentiel dépendait énormément de la prise en charge principale des lambdas dans les bibliothèques quotidiennes comme boost et QT.
Est-ce que quelqu'un sait s'il est prévu d'étendre ces bibliothèques avec les nouvelles fonctionnalités de C ++ 0x?

lambdas remplace pratiquement le besoin de boost :: lambda et de tout ce qui en boit qui interagit avec lui. QT pourrait ajouter un support pour les lambdas dans tous leurs conteneurs et peut-être même comme autre moyen de définir les SLOT s

Était-ce utile?

La solution

Lambdas s’intègre déjà très bien dans les bibliothèques existantes - partout où une fonction accepte un objet fonction d’un type donné par un paramètre de modèle.

C’est l’un des grands avantages qui les caractérisent: c’est un exemple classique d’une fonction de langage codant la pratique existante dans une syntaxe astucieuse.

Évidemment, la bibliothèque boost lambda devient redondante, mais cela signifie qu’elle ne nécessite aucune nouvelle fonctionnalité.

Autres conseils

Je ne vois pas en quoi l'utilisation de lambda dépend du soutien des bibliothèques. Lambdas élimine le besoin de créer de nombreuses classes simplement pour envelopper différents petits algorithmes et s'intègre parfaitement avec d'autres fonctionnalités de langage / bibliothèque ( std :: function me vient à l'esprit). Où que vous utilisiez auparavant un objet ou un pointeur de fonction, vous pouvez également utiliser lambdas.

Ils ajoutent donc principalement une autre alternative pour utiliser le code et les bibliothèques existants. La seule façon pour les bibliothèques de mieux prendre en charge lambda consiste à utiliser des approches plus fonctionnelles.

Il est fort probable que de telles bibliothèques attendent le support adéquat du compilateur pour les fonctionnalités C ++ 0x pertinentes et ne s'embarrassent pas tant que les compilateurs traditionnels ne le prennent pas en charge. Ne retenez pas votre souffle.

Ce n'est PAS vrai, vous ne pouvez pas remplacer boost :: lambda par C ++ 0x lambda. Voir ici pour certains raisons (à propos de boost bind, mais je pense que la plupart des transferts sont effectués)

De même, @daniel this pourrait vous aider à commencer à utiliser les fonctions lambda / boost bind pour les slots. Cela me rend la vie incroyablement facile.

De plus, @litb de mes sources, les lambdas ne seront pas changés (argh)

La plupart des bibliothèques utilisent des pointeurs de fonction standard pour les rappels. Les lambdas C ++ 0x peuvent être utilisés comme pointeurs de fonction, la plupart des bibliothèques n'auraient donc pas besoin d'être modifiées. D'autres bibliothèques utilisent des modèles pour pouvoir prendre n'importe quel objet appelable (par exemple, std :: foreach n'aurait pas besoin d'être modifié).

La seule autre fonctionnalité de C ++ 0x à laquelle les bibliothèques pourraient éventuellement appartenir est l'utilisation de enums fortement typés. De plus, les bibliothèques peuvent commencer à utiliser les modèles extern pour réduire les temps de compilation.

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