gpt4 book ai didi

c++ - 指向成员函数的指针的语法错误

转载 作者:行者123 更新时间:2023-11-28 00:45:49 25 4
gpt4 key购买 nike

称呼我正在尝试对特价对象使用 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

我已经尝试了一些其他方法来让事情正常进行,但没有任何效果。

我并不一定要指向成员函数的指针,如果您有一种简单/不同的方法来做到这一点,我们欢迎您。

非常感谢,

阿兹里拉

最佳答案

你不能使用这样的东西,你应该在这种情况下使用 std::bindboost::bindlambda,因为 sort 第三个参数应该是可调用对象,接收两个 T 类型的对象。

对于 std::bind 它将是

using namespace std::placeholders;
sort(list.begin(), list.end(), std::bind(ptr, this, _1, _2));

关于c++ - 指向成员函数的指针的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16298382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com