我有一个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
返回类型的成员函数做类似的事情,它们似乎工作得很好。在我的例子中,是返回类型造成了差异,还是我只是错误地实现了函数?
1条答案
按热度按时间5gfr0r5j1#
对于
std::bind
,您还需要沿着方法传递对象指针,如Here是编译后的代码。