Каков наилучший способ использования метода из указателя в stl::generate
? Пример:C++ Сгенерировать функцию с помощью указателя
std::vector<double> doSomethingToAVector(boost::shared_ptr<RandomGenerator> randomGen){
std::vector<double> output(100);
std::generate(output.begin(), output.end(), randomGen->returnANumber());
return output;
}
RandomGenerator
просто некоторый произвольный класс с методом returnANumber()
, который возвращает произвольный двойником.
Моего компилятор в настоящее время говорит
called object type 'double' is not a function or function pointer
*__first = __gen();
Должен ли я использовать mem_fun
или другую такую магию?
Hi. Да, кажется, мне нужно «привязать» его. Если это не так: 'std :: bind (& RandomGenerator :: returnANumber, randomGen, std :: placeholders :: _ 1)' Я не хочу использовать C++ 11, поскольку я ничего не знаю об этом еще и не может гарантировать, что у других это будет. Хм. – user2966558
@ user2966558: 'std :: generate()' хочет использовать объект с нулевой функцией. Ваше выражение создаст унарную функцию, то есть алгоритм должен будет пройти, по крайней мере, один аргумент, но он не передает никаких аргументов функции генератора. Что касается C++ 11, я думаю, что Boost имеет аналогичный 'bind()', который также работает с типами указателей в качестве первого аргумента для функций-членов. –
@ user2966558 Он [работает] (http://coliru.stacked-crooked.com/a/028215f13c7cee72) с 'boost :: bind' – Praetorian