0

オブジェクトのインスタンスの関数へのポインターを取得しようとしています。これが私のコードです:

#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);
}

mydice.roll()私のコンパイラは、ジェネレート行で不可解なメッセージで私に吠えます =) generate を呼び出して vector を生成するように適切に指示する方法を指摘してくださいv

4

2 に答える 2

3

それにオブジェクトを与えます:

generate(..., std::bind(&Dice::roll, &mydice));

std::bindにあり、<functional>引数をバインドして、引数を指定せずに関数を呼び出すことができるようにします。

于 2013-03-30T02:16:22.523 に答える
1

別の可能なアプローチ: () 演算子を使用して、 dice クラス自体を関数型として定義します。これをクラスに含めます:int operator()() { return roll(); }を使用すると、ジェネレーターを で簡単に呼び出すことができますgenerate(v.begin(),v.end(), mydice);

于 2013-03-30T10:13:43.950 に答える