gpt4 book ai didi

c++ - 如何使用此类中的成员函数调用 STL::nth_element?

转载 作者:太空宇宙 更新时间:2023-11-03 10:26:18 26 4
gpt4 key购买 nike

我想在一个类中将函数 nth_element 与我自己的排序函数(应该可以访问对象的数据)一起使用。目前,我正在做以下事情:

class Foo
{
public:
glm::vec3 *points;
int nmbPoints;

bool idxPointCompareX(int a, int b);
void bar();
}

bool Foo::idxPointCompareX(int a, int b)
{return points[a].x < points[b].x;)

void Foo::bar()
{
stl::vector<int> idxPointList;
for(int i = 0; i < nmbPoints; i++) idxPointList.push_back(i);

stl::nth_element(idxPointList.first(),idxPointList.first()+nmbPoints/2,idxPointList.end(), idxPointCompareX);
}

当然,这没有用,我得到了错误:“必须调用对非静态成员函数的引用”。之后,我看了看Reference to non-static member function must be called , How to initialize std::function with a member-function?以及其他一些问题。我明白为什么这不起作用,但我不确定如何解决这个问题。

有人可以帮助我并告诉我如何解决这个问题吗?

最佳答案

要获取成员函数的地址,您需要使用正确的语法,即 &Foo::idxPointCompareX 而不仅仅是 idxPointCompareX

但是您还需要一个 Foo 对象来调用该函数,因此您需要将一个对象绑定(bind)到它。大概你的意思是在 this 上调用它,这样你就可以使用 std::bind:

using namespace std::placeholders;
stl::nth_element(begin, begin+n, end,
std::bind(&Foo::idxPointCompareX, this, _1, _2));

或者更简单,使用 lambda 函数:

stl::nth_element(begin, begin+n, end, 
[this](int a, int b) { return idxPointCompareX(a, b);}
);

这将创建一个捕获 this 并将其参数传递给捕获的 this 指针上的 idxPointCompareX 函数的 lambda 函数。

关于c++ - 如何使用此类中的成员函数调用 STL::nth_element?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33732105/

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