7

メンバー変数にバインドするときに boost::bind が何をするかについて混乱しています。メンバー関数へのバインドでは、基本的に関数オブジェクトを作成し、それを呼び出して、提供または遅延され、プレースホルダーを介して置換される引数を渡します。

しかし、この式は舞台裏で何をしているのですか?

boost::bind(&std::pair::second, _1); 

プレースホルダー _1 の代わりに何が置き換えられますか?

boost::bind に関する記事からこの例を読んでいるときに、これを見つけました。

void print_string(const std::string& s) {
  std::cout << s << '\n';
}

std::map<int,std::string> my_map;
my_map[0]="Boost";
my_map[1]="Bind";

std::for_each(
  my_map.begin(),
  my_map.end(),
   boost::bind(&print_string, boost::bind(
      &std::map<int,std::string>::value_type::second,_1)));

ソース

4

2 に答える 2

2
boost::bind(&std::pair<U,V>::second, _1);

機能的に同等です

std::pair<U,V> p -> p.second

すなわち。apair<U,V>をその secondメンバーにマップする関数 (オブジェクト) です。

于 2009-07-21T11:58:37.630 に答える