1

重複の可能性:
C++11ラムダでBoostアダプターを使用する

Boost範囲アダプターを使用して、C ++ 11ラムダ関数を介してマップをリストにマップ(変換)したいと思います。このような:

  boost::copy(myMap | transformed([](pair<string, string> p){return p.first;}),
              ostream_iterator<string>(cout, ", "));

std :: functionにはvalue_type-typeがないため、これは機能しません。この特定の変換はmap_keysを使用して実行できることは知っていますが、私のポイントはより一般的です。BoostでC++11ラムダを使用するにはどうすればよいですか?

ボイラープレートなしでは実行できない場合、この問題を修正する計画はありますか?探してみましたが、意外と少ないです。

4

1 に答える 1

1

自分で見つけた!Boost 1.51.0以降、追加します

#define BOOST_RESULT_OF_USE_DECLTYPE

ブースト ファイルを含める前に、::value_type の代わりに decltype を魔法のように使用して、戻り値の型を推測します。今、私の例はうまくいきます!

于 2012-10-01T13:19:46.023 に答える