请看一下Johannes Schaub发布的这个例子来排序对的向量:
std::sort(a.begin(), a.end(),
boost::bind(&std::pair<int, int>::second, _1) <
boost::bind(&std::pair<int, int>::second, _2));
Run Code Online (Sandbox Code Playgroud)
我以为我确实理解了boost :: bind,但我遇到了这个问题.
问题1:
排序算法期望谓词函数作为第三个参数.我在这里看到的是一个布尔表达式.我错过了什么?:
boost::bind(&std::pair<int, int>::second, _1) < boost::bind(&std::pair<int, int>::second, _2)
Run Code Online (Sandbox Code Playgroud)
对于那两个绑定,boost :: bind库是否重载operator <并且正在返回某种函数指针(如lambda)?
问题2:
这让我感到困惑:
boost::bind(&std::pair<int, int>::second, _1)
Run Code Online (Sandbox Code Playgroud)
通常有一些函数指针作为绑定调用的第一个参数,但是这里是一个类成员的地址?特定绑定的结果是什么?
感谢您的时间和帮助
RC.*_*RC. 14
boost :: bind重载运算符!和关系和逻辑运算符==,!=,<,<=,>,> =,&&,||,所以这就是为什么你"看到"一个布尔表达式,但你真的得到了一个函数谓词.
从那里你可以看到你绑定了对的第二个成员,用于重载的小于函数的第一个和第二个参数.
至于你的第二个问题:Boost bind会在你传递指向成员的指针并将其视为你调用时将其识别出来
bind<R>(mem_fun(&std::pair<int,int>::second), args);
Run Code Online (Sandbox Code Playgroud)
这是文档描述的方式:
使用绑定指向成员的指针
指向成员函数和指向数据成员的指针不是函数对象,因为它们不支持operator().为方便起见,bind接受成员指针作为其第一个参数,行为就像使用boost :: mem_fn将成员指针转换为函数对象一样.换句话说,表达
bind(&X :: f,args)
相当于
bind(mem_fn(&X :: f),args)
其中R是X :: f的返回类型(对于成员函数)或成员的类型(对于数据成员).
您可以在此处找到此信息和更多信息.
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |