【发布时间】:2013-04-30 11:07:19
【问题描述】:
问候 我正在尝试对特殊对象使用 std::sort 算法。 我有一个要排序的列表和一个二进制函数,它可以给我一个比较:
B.cpp 中有趣的部分
void B::FindClosest(vector<A*> list)
{
bool (B::*ptr)(A*,A*) = &B::Closer;
sort(list.begin(),list.end(),(this->*ptr));
// some use of this sorted list
}
bool B::Closer(A* lhs ,A* rhs)
{
if(Distance(this,lhs)<Distance(this,rhs))
{
return true;
}
else
{
return false;
}
}
还有 B.h:
class B : public A
public:
void FindClosest(vector<A*>);
bool Closer(A*,A*);
这看起来很简单,但我不知道为什么它不起作用。 在我看来,我在指向成员函数的指针上做错了,但无法找出原因。
这是错误信息:
agglomerate.cpp:32: error: invalid use of non-static member function
我尝试了其他一些方法来让事情正常工作,但没有。
我没有绑定到成员函数的指针,如果你有一个简单/不同的方法来做这件事,欢迎你。
非常感谢,
阿兹瑞拉
【问题讨论】:
-
它不起作用,因为
this->*ptr没有按照您的想法执行。它不会通过绑定this创建常规函数指针。它甚至不是合法的语法。 -
您需要一个函子对象,该对象包含对
B对象的引用。
标签: c++ function pointers member