c++ 以成员函数为参数的成员函数

uxh89sit  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(108)

我有一个Hunter类,它有一个成员函数random_hunt,它返回一个pair<int, int> const,它应该等价于某个点(x,y)。我正在尝试实现第二个成员函数test_hunt,它将返回random_hunt在给定目标对、成员函数本身和类本身的情况下到达目标点所需的尝试次数。
我尝试了两种实现方式:

class Hunter {
        // 1
    int test_hunt(std::function<pair<int, int> const()> func, pair<int, int>& const target) {
        int tries = 0;
        while (target != func())
            tries++;
        return tries;
    }

        // 2
    int test_hunt(pair<int, int> const (Hunter::* func)(), Hunter& hunter, pair<int, int>& const target) {
        int tries = 0;
        while (target != (hunter.*func)())
            tries++;
        return tries;
    }
};

主要内容:

Hunter hunter;

auto fp = std::bind(&Hunter::random_hunt);
std::cout << hunter.test_hunt(fp, r_start_pos) << '\n';

std::cout << hunter.test_hunt(&Hunter::random_hunt, hunter, r_start_pos) << '\n;

也不编译,我不知道为什么。我看过前面的例子,它们使用void返回类型的成员函数做类似的事情,它们似乎工作得很好。在我的例子中,是返回类型造成了差异,还是我只是错误地实现了函数?

5gfr0r5j

5gfr0r5j1#

对于std::bind,您还需要沿着方法传递对象指针,如

auto fp = std::bind(&Hunter::random_hunt,&hunter);

Here是编译后的代码。

相关问题