C++ 绑定到成员变量
当我们绑定到成员变量时,boost::bind做了什么,我对此感到困惑。通过绑定到成员函数,我们本质上创建了一个函数对象,然后通过占位符向其传递提供的、延迟的和替换的参数来调用它 但这句话在幕后有什么作用: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(&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::coutboost::bind(&std::pair::second,_1);
在功能上等同于
std::pair<U,V> p -> p.second
std::对p->p.second
即,它是一个函数(对象),将对
映射到其第二个
成员
std::pair<U,V> p -> p.second