Усилить функцию и повысить лямбду - PullRequest
4 голосов
/ 08 февраля 2011

Я видел несколько связанных вопросов, но все еще озадачен. Что не так с этим синтаксисом:

boost::function<int (int)> g = f;
boost::function<int (int)> g2 = 2*g(boost::lambda::_1);

Я пробовал это с надстройками 1.35 и 1.38 (это две установки, которые у меня лежат) на gcc 4.3.4, и обе они дают варианты ошибки:

no match for call to '(boost::function<int ()(int)>) (const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >&)'

Ответы [ 2 ]

8 голосов
/ 08 февраля 2011

Вы не можете вызвать функцию с заполнителем напрямую.Вы должны использовать bind.

boost::function<int (int)> g2 = 2 * boost::lambda::bind(g, boost::lambda::_1);

( Пример )

2 голосов
/ 09 марта 2012

Я предлагаю вам отказаться от Boost.Lambda, поскольку оно устарело. Компилятор, который поддерживает C ++ 0x, обеспечивает родную лямбду и его легче понять. Вы можете использовать GCC с 4.4 или более поздней версией, Visual Studio 2010 также поддерживает C ++ 0x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...