C ++ Boost Lambda библиотеки - PullRequest
       47

C ++ Boost Lambda библиотеки

4 голосов
/ 25 сентября 2008

Какой может быть лучший способ начать программирование с использованием лямбда-библиотек Boost.

Ответы [ 3 ]

17 голосов
/ 25 сентября 2008

Оставаясь в границах языка и библиотек C ++, я бы предложил сначала привыкнуть к программированию с использованием шаблонов функций алгоритма STL, так как одним из наиболее распространенных вариантов использования boost :: lambda является замена классов функторов на встроенные выражения. встраиваются.

Сама документация библиотеки дает вам предварительный пример того, для чего она нужна:

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

где std::cout << _1 << ' ' создает объект функции, который при вызове записывает свой первый аргумент в поток cout. Это то, что вы могли бы сделать с пользовательским классом функторов, std::ostream_iterator или явным циклом, но boost :: lambda выигрывает в краткости и, вероятно, ясности - по крайней мере, если вы привыкли к концепциям функционального программирования.

Когда вы (чрезмерно) используете STL, вы обнаруживаете, что тяготеете к boost :: bind и boost :: lambda. Это очень удобно для таких вещей, как:

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

Прежде чем вы достигнете этой точки, не так уж много. Поэтому используйте алгоритмы STL, пишите свои собственные функторы, а затем переводите их во встроенные выражения, используя boost :: lambda.

С профессиональной точки зрения, я считаю, что лучший способ начать работу с boost :: lambda - это понять и принять использование boost :: bind. Использование заполнителей в выражении boost :: bind выглядит гораздо менее волшебным, чем «голые» заполнители boost :: lambda, и их легче воспринимать при проверке кода. Выход за рамки базового повышения :: лямбда вполне может вас огорчить от коллег, если вы не в передовом магазине C ++.

Старайтесь не выходить за борт - 1018 * случаев * и 1010 * бывают в тех случаях, когда for -петл действительно является правильным решением.

2 голосов
/ 25 сентября 2008

Зависит. Вы уже хорошо разбираетесь в концепциях функционального программирования? Если нет, я бы посоветовал вам начать с языка, который предназначен для функционального программирования, а не с процедурным языком, на котором функциональные функции сшиты. Если вы не привыкли к кодированию в функциональном стиле (это не обязательно сложнее обязательно, но определенно другое), тогда вы потратите больше времени на борьбу с синтаксисом и не хватит времени на изучение, чтобы выполнить работу.

Что касается того, с чего начать, я порезал свои функциональные зубы на Схеме, но есть много хороших вариантов.

1 голос
/ 25 сентября 2008

Если вы работаете с относительно новым компилятором, вы можете использовать boost. Если он еще не установлен на вашем компьютере, установите его (sudo apt-get install libboost-dev в unbuntu, скачайте двоичные файлы на boost.org, если вы используете Windows). Прочтите doc , а затем посмотрите на существующий код и найдите ситуации, в которых вы можете его использовать. Много ли у вас дублирования кода, которое можно было бы устранить, если вы, например, параметризовали функцию небольшим фрагментом кода?

...