Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 绑定到成员变量_C++_Boost_Boost Bind - Fatal编程技术网

C++ 绑定到成员变量

C++ 绑定到成员变量,c++,boost,boost-bind,C++,Boost,Boost Bind,当我们绑定到成员变量时,boost::bind做了什么,我对此感到困惑。通过绑定到成员函数,我们本质上创建了一个函数对象,然后通过占位符向其传递提供的、延迟的和替换的参数来调用它 但这句话在幕后有什么作用: boost::bind(&std::pair::second, _1); 用什么代替占位符_1 我在阅读boost::bind文章中的示例时发现了这一点: void print_string(const std::string& s) { std::cout <

当我们绑定到成员变量时,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)));
void打印字符串(const std::string&s){

std::cout在幕后,它使用一个成员指针,并将其应用于传入的参数。在绑定上下文中,它相当复杂,因此下面是一个指向成员的指针用法的简单示例:

int main()
{
   std::pair< int, int > p1 = make_pair( 1, 2 );
   std::pair< int, int > p2 = make_pair( 2, 4 );
   int std::pair<int,int>::*ptr = &std::pair<int,int>::second; // pointer to second member

   std::cout << p1.*ptr << std::endl; // 2 dereference pointer to member 
   std::cout << p2.*ptr << std::endl; // 4 dereference pointer to member
}
intmain()
{
std::pairp1=make_pair(1,2);
std::pairp2=make_pair(2,4);
int std::pair::*ptr=&std::pair::second;//指向第二个成员的指针
std::cout
boost::bind(&std::pair::second,_1);
在功能上等同于

std::pair<U,V> p -> p.second
std::对p->p.second
即,它是一个函数(对象),将
映射到其
第二个
成员

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