我正在尝试获取指向我的对象实例的函数的指针。这是我的代码:
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
class Dice {
int face;
public:
Dice () {
face = rand() % 6 + 1;
}
int roll() {
face = rand() % 6 + 1;
return face;
}
};
int main()
{
Dice mydice;
vector<int> v(1000);
generate(v.begin(),v.end(),mydice.roll);
}
我的编译器在带有神秘消息的生成行上咆哮我=)请指出如何正确地告诉generate调用mydice.roll()
来填充向量v
。
答案 0 :(得分:3)
给它一个对象:
generate(..., std::bind(&Dice::roll, &mydice));
std::bind
位于<functional>
并绑定参数,以便可以在不提供函数的情况下调用函数。
答案 1 :(得分:1)
另一种可能的方法:使用()运算符将dice类本身定义为函数。在您的课程中加入int operator()() { return roll(); }
,然后您只需使用generate(v.begin(),v.end(), mydice);
调用您的生成器。