2011-02-08 72 views
4

我见过一些相关的问题,但我仍然感到困惑。有什么不对的语法:Boost函数和提升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的编译器提供了原生lambda,并且更易于理解。您可以使用4.4或更高版本的GCC,Visual Studio 2010也支持C++ 0x。