我有一个名为Sorter
的班级。它有两个公共项目。
int
类型变量choice
compare
的成员函数,其int
类型的返回值接受两个对象作为参数。我尝试在将Sorter
传递给构造函数时创建choice
的实例,
然后我想使用C ++ sort
函数对vector
进行排序。并传递我创建的实例的成员函数compare
。
compare
成员函数使用变量choice
来决定排序机制。
但是我无法获得指向compare
实例的成员函数Sorter
的指针。
有人可以就此提出建议吗?
答案 0 :(得分:4)
如果您可以更改Sorter
类的结构,可以通过这样定义operator ()
使其成为函数对象:
bool Sorter::operator ()(const MyObject &o1, const MyObject &o2) {
// return true if o1 < o2
}
然后,您只需将Sorter
课程的实例传递给std::sort
。
答案 1 :(得分:0)
不幸的是,对于像这样的事情,标准库在组合器方面有点缺乏。但是,boost::lambda可以完成这项工作:
#include <boost/lambda/bind.hpp>
namespace l = boost::lambda;
struct foo {
bool bar(char, char);
};
void test(foo *pFoo) {
char a[2] = {0};
std::sort(a, a+1,
l::bind(&foo::bar, pFoo, l::_1, l::_2));
}