2009-06-26 8 views
1

Wikipedia semble dire que C++ 0x prendra en charge les fonctions anonymes. Boost semble également le soutenir. Cependant j'utilise. NET donc si je pouvais rester avec ça ce serait génial.Est-il possible d'utiliser des fonctions anonymes dans C++ .NET?

Fondamentalement, je veux juste écrire un code rapide pour les objets. J'ai un robot qui peut avoir environ 85 - 90 états. La plupart des états ne sont que des "valeurs entières transmises au microcontrôleur du robot". Donc je dis au robot d'aller à l'état 35 par exemple.

Cependant, certains états nécessitent des manipulations supplémentaires telles que la saisie par l'utilisateur, donc je voudrais rester simple et écrire quelques lignes de code pour les différences. J'ai envisagé d'utiliser des classes dérivées mais cela implique beaucoup de code juste pour modifier quelques lignes.

Répondre

-1

Les fonctions anonymes, appelées alternativement Lambda Expressions ou Delegates, sont une fonctionnalité de langage C# et ne font pas partie du framework .NET. Je ne pense pas que Microsoft a ajouté des fonctions anonymes à C++ géré, et j'ai trouvé quelques comments qui semblent être d'accord avec moi.

Ne vous inquiétez pas, cependant. Comme vous l'avez mentionné, Boost.Lambda est une bibliothèque astucieuse que vous pouvez utiliser. Ce qui est sympa, c'est qu'il est implémenté en tant que modèles complètement dans les en-têtes. Donc, tout ce que vous avez à faire est d'inclure les en-têtes. Tout compilateur C++ conforme aux normes devrait le supporter. Je comprends votre désir de rester avec ce que vous avez déjà, mais l'effort qu'il faut pour télécharger et utiliser ces en-têtes devrait vraiment être minime.

Si vous ne voulez vraiment pas utiliser Boost, alors vous pouvez essayer d'utiliser C#, mais je vous recommande d'essayer la bibliothèque Boost Lambda. C'est probablement plus facile que vous ne le pensez.

+0

La nouvelle version de la norme C++ a aussi des expressions lambda, même si elles sont un peu bizarres. –

+0

Content de savoir que C++ est en train d'obtenir des expressions lambda maintenant. Mais quand j'ai répondu à cette question il y a 3 mois, ce n'était pas clair ... du moins pas pour moi. –

0

Si par C++. NET vous voulez dire C++/CLI, alors oui. Lorsque MS prend en charge les expressions C++ 0x lambda dans leur compilateur C++, ce support s'étendra à C++/CLI. Si vous voulez des expressions lambda maintenant, alors vous êtes coincé avec Boost.Lambda.

0

C++ 0x Les fonctions lambda sont disponibles en C++/CLI avec la libération de VC2010. Toutefois, il s'agit d'objets C++ natifs et ne peuvent pas être utilisés en tant que délégués C++/CLI. Vous devez également utiliser gcroot<> pour transmettre les handles .NET.

Questions connexes