2011-06-27 1 views
5

ラムダ式にはGCCバージョン> 4.4が必要なので、参照バインド変数を持つラムダ式を含むコードを移植する最も洗練された、または最も速いプレC++ 0xコード?ラムダ式をC++でエレガントに移植する

これはテンプレート/マクロを使用して半自動で行うことができますか?

答えて

6

boost::lambdaをご覧ください。これはあなたが探しているものを行うはずです。

+0

+1することはできませんので、私は、それのために自分自身を多くの使用を見つけていない

注意。私はboost :: lambdaを少し使用しましたが、いくつかの点でそれはかなり厄介なものでした。ラムダargsでメソッドを直接使用することはできません。例えば ​​'sort(v.begin()、v.end()、_1.size()<_2.size())'を実行することはできませんが、 'sort(v.begin()、v。 end()、f(_1)

+1

Boost 1.47(現在ベータ版で、次の数週間以内にリリースされる予定です)では、Boost.Lambdaは正式に廃止され、[Boost.Phoenix v3](http: /beta.boost.org/libs/phoenix/index.html)、Boost.Phoenixはこの時点でより良い提案です。 – ildjarn

+1

@Aaron:Boost.Phoenixには、怠惰な[すべての標準ライブラリコンテナとアルゴリズムのラッパー](http://beta.boost.org/libs/phoenix/doc/html/phoenix/modules/stl.html)が含まれています。 'sort(v.begin、v.end()、size(_1) ildjarn

2

(免責事項:私は自分のサイトにリンクしています)

約一年前、私はa blog post of mineにいくつかの便利なマクロを置きます。私はそれがどのように移植可能であるか分かりませんし、かなり限られています。しかし、簡単な表現ではうまくいきます。それは良い:-)

sort(vs.begin(), vs.end(), 
YALM(bool,vector<int>&,vector<int>&,return l.size() < r.size() ) 
); 
関連する問題