2011-02-08 2 views
4

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

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> >&)' 

ответ

8

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

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

(Example)

2

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

Смежные вопросы