2011-02-08 7 views
4

私はいくつかの関連する質問を見ましたが、まだ困惑しています。この構文と間違って何:ブースト機能とブーストラムダ

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

私は、GCC 4.3.4で、彼らの両方がエラーのバリエーションを与える(これらは私が転がってきた2つのインストールされている)ブースト1.35と1.38でそれを試してみました

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をサポートするコンパイラはネイティブラムダを提供し、理解しやすくなります。あなたは4.4以上のバージョンでGCCを使うことができ、Visual Studio 2010はC++ 0xもサポートしています。

関連する問題