Я пытаюсь обобщить свою функцию тестирования, получив функцию для тестирования в качестве первого параметра, а количество итераций - в качестве второго.
Но поскольку тестируемая функция должна получать дополнительные параметры, я подумал, что заполню параметры в теле лямбда-функции и передам их функции тестирования. (Я думаю, это называется каррированием?)
В любом случае я не могу заставить его скомпилировать:
main.cpp:43:62: error: invalid initialization of non-const reference of type ‘std::function<double*()>&’ from an rvalue of type ‘main(int, char**)::<lambda()>’
bench::bench([=](){rng::gpu_r_exp((int) 10e6, lambda);}, 50);
Объявление функции выглядит так:
void bench(std::function<double*()>& funct_to_bench, int repeats);
и Я использую его так:
bench::bench([=](){rng::gpu_r_exp((int) 10e6, lambda);}, 50);
Поскольку компилятор снова спорит о non-const
, я, возможно, должен добавить, что gpu_r_exp
использует глобальную переменную, в которой хранится rngState
(это также не понравилось неконстантные параметры в gpu_r_exp
).
Я действительно застрял. Я просто хочу заполнить параметры и передать предварительно подготовленный дескриптор функции в функцию тестирования, чтобы она могла обернуть вокруг него таймер с индикатором выполнения.
РЕДАКТИРОВАТЬ: Я должен добавить, что параметр с именем lambda
- это двойное число, которое является параметром экспоненциального распределения и не имеет ничего общего с лямбда-функцией.