Можно ли использовать анонимные функции в C ++ .NET? - PullRequest
1 голос
/ 26 июня 2009

Википедия , кажется, говорит, что C ++ 0x будет поддерживать анонимные функции. Boost также, кажется, поддерживает это. Однако я использую .NET, так что если бы я мог придерживаться этого, это было бы здорово.

По сути, я просто хочу написать небольшой код для объектов. У меня есть робот, который может иметь около 85 - 90 состояний. Большинство состояний являются просто «целочисленными значениями, передаваемыми в микроконтроллер робота». Поэтому я говорю роботу перейти в состояние 35, например.

Однако некоторые состояния требуют дополнительных манипуляций, таких как ввод данных пользователем, поэтому я хотел бы сделать это простым и написать всего несколько строк кода для различий. Я подумал об использовании производных классов, но для изменения нескольких строк требуется много кода.

Ответы [ 3 ]

1 голос
/ 07 октября 2009

Если под C ++. NET вы имеете в виду C ++ / CLI, то да. Когда MS поддерживает лямбда-выражения C ++ 0x в своем компиляторе c ++, эта поддержка будет распространяться на C ++ / CLI. Если вы хотите лямбда-выражения сейчас , то вы застряли с Boost.Lambda.

0 голосов
/ 23 сентября 2010

C ++ 0x лямбда-функции доступны в C ++ / CLI с выпуском VC2010. Однако это собственные объекты C ++, и их нельзя использовать в качестве делегатов C ++ / CLI. Вы также должны использовать gcroot<> для передачи дескрипторов .NET.

0 голосов
/ 30 июня 2009

Анонимные функции, альтернативно называемые Лямбда-выражения или Делегаты, являются языковой функцией C # и не являются частью .NET Framework. Я не думаю, что Microsoft добавила анонимные функции в управляемый C ++, и я нашла несколько комментариев , которые, похоже, согласны со мной.

Не беспокойся. Как вы упомянули, Boost.Lambda - это отличная библиотека, которую вы можете использовать. Что приятно, так это то, что он полностью реализован в виде шаблонов в заголовках. Итак, все, что вам нужно сделать, это включить заголовки. Любой соответствующий стандартам компилятор C ++ должен поддерживать его. Я понимаю ваше желание придерживаться того, что у вас уже есть, но усилия, необходимые для загрузки и использования этих заголовков, должны быть минимальными.

Если вы действительно не хотите использовать Boost, то вы можете попробовать использовать C #, но я рекомендую вам просто попробовать библиотеку Boost Lambda. Это, вероятно, проще, чем вы думаете.

...