Вопрос

Какой может быть наилучший способ начать программирование с использованием boost lambda-библиотек?

Это было полезно?

Решение

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

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

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

где std::cout << _1 << ' ' создает объект-функцию, который при вызове записывает свой первый аргумент в cout ручей.Это то, что вы могли бы сделать с помощью пользовательского класса functor, 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, и его легче принять во время проверки кода.Выход за рамки базового использования boost::lambda, скорее всего, доставит вам неприятности от ваших коллег, если только вы не работаете в передовом магазине C ++.

Старайся не перегибать палку - там являются времена, когда и места, где for-петля в самом деле это правильное решение.

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top