这个问题在这里已有答案:
- 使用成员函数作为比较器排序问题 7个答案
2581
2018-03-26 19:06
起源
为什么这个函数不是静态的? - chris
哪一个?我不允许更改函数Count()的声明 - Nash
答案:
你必须做 Foo::comparator
静态或包装在一个 std::mem_fun
类对象。这是因为lower_bounds要求比较器是一个具有调用操作符的对象类,如函数指针或函子对象。此外,如果您使用的是C ++ 11或更高版本,您也可以这样做 dwcanillas 建议并使用lambda函数。 C ++ 11也有 std::bind
太。
例子:
// Binding:
std::lower_bounds(first, last, value, std::bind(&Foo::comparitor, this, _1, _2));
// Lambda:
std::lower_bounds(first, last, value, [](const Bar & first, const Bar & second) { return ...; });
5
2018-03-26 19:12
别客气。我会说比较函数是静态的,因为它不访问类。 - Matthew Holder
最简单的解决方法是使比较器功能保持静态:
static int comparator (const Bar & first, const Bar & second);
^^^^^^
在调用时 Count
,它的名字将是 Foo::comparator
。
你现在拥有它的方式,成为非静态成员函数是没有意义的,因为它不使用任何成员变量 Foo
。
另一个选择是使它成为非成员函数,特别是如果有意义的话,这个比较器可能被其他代码使用 Foo
。
7
2018-03-26 19:54
你应该通过一个 this
指向函数的指针,因为它依赖于它而不是a static
会员功能。
1
2018-03-26 19:14