2

でポインターからメソッドを使用する最良の方法は何stl::generateですか? 例:

std::vector<double> doSomethingToAVector(boost::shared_ptr<RandomGenerator> randomGen){
    std::vector<double> output(100);
    std::generate(output.begin(), output.end(), randomGen->returnANumber());
    return output;
}

RandomGeneratorreturnANumber()は、任意の double を返すメソッドを持つ任意のクラスにすぎません。

私のコンパイラは現在言っています

  called object type 'double' is not a function or function pointer
    *__first = __gen(); 

mem_funなどの魔法を使うべきですか?

4

1 に答える 1

1

を使用std::bind()して、暗黙的なオブジェクト パラメーターをバインドできます。例えば:

std::generate(output.begin(), output.end(),
              std::bind(&RandomGenerator::returnANumber, randomGen));

randomGenが である場合に機能するかどうかはわかりませんが、 で機能するboost::shared_ptr<RandomGenerator>ことは確かstd::shared_ptr<RandomGenerator>です。これは、現在の C++ (つまり、2011 年からのリビジョン) を想定しています。C++03 を使用した Boost でも同様のことが機能すると思います。

于 2013-11-07T21:00:30.747 に答える