std::for_each
ループで反復されているマップがあります。ネストされたバインドと単純なヘルパー関数を使用して、必要なペアの要素にアクセスしています。これは、C++11 より前のコードから使用できる必要があります。
typedef std::map<int, Foo> MapType;
std::for_each(
testMap.begin() ,
testMap.end() ,
std::bind(
&Foo::myIncredibleFunction ,
std::bind(
&ValueExtractor< MapType::key_type , MapType::mapped_type >::getValue,
std::placeholders::_1 )));
これはうまく機能します(ただし、洗練される可能性はあると思います)
また、現在のコード ベースを現在のレベルから C++11 に移行する予定なので、言語の新機能を使用してコード (読みやすさ、効率) を改善できるかどうかを検討しています。たとえば、私は次のことを試しました(失敗しました - 以下のテンプレートエラーを参照してください)
std::for_each(
testMap.begin() ,
testMap.end() ,
std::bind(
&Foo::myIncredibleFunction ,
std::get<1>( std::placeholders::_1 )));
エラー
1>d:\projects\test_bind\test_bind\test_bind.cpp(48): error C2780:
std::bind ...<Snip>...
: expects 6 arguments - 2 provided
また、インテリセンスには次のものがあります。
IntelliSense: no instance of overloaded function "std::get" matches the argument list
argument types are: (std::_Ph<1>)
の使用法をさまざまに組み合わせstd:get<1>()
て、内部バインドを置き換えようとしましたが、成功しませんでした。これを正しく理解できていないのではないかと思いますが、やりたいことができるはずだと感じています。std::get
ヘルパー関数/ファンクターなしで呼び出しを使用してこれを行う方法はありますか?
編集: KennyTM は、コードで実際に行っていることに関して、私の答えを思いついたと思います。それは私のアプローチよりもはるかに優れています。std::get<>
上記で使用できるかどうか、またはなぜ使用できないかについては、まだ興味があります。