在回答上一个问题(A function to execute any function with any types and numbers of parameter in C++)时,我发现在将函数作为另一个函数的参数传递时,我可以使用std :: bind方法绑定参数。然后我如何将它传递给另一个函数?中间函数(repeatFunction)和计时器的代码如下所示:
template<typename F>
double timer(F function) {
clock_t tstart, tend;
tstart = clock();
function();
tend = clock();
return ((double)tend - tstart) / CLOCKS_PER_SEC;
}
template<typename F>
std::vector<double> repeatFunction(F function) {
std::vector<clock_t> numCalls(9);
std::vector<double> info;
std::generate(numCalls.begin(), numCalls.end(), [&](){ timer(function); });
info.push_back(mean(numCalls));
info.push_back(standardDeviation(numCalls));
return info;
}
代码接受一个传递的函数并运行它多次,然后返回函数运行的时间。函数(F函数)从main绑定,如下所示:
#include <cstdlib>
#include <algorithm>
#include <numeric>
#include <vector>
#include <cmath>
#include <ctime>
#include <iostream>
#include "functions.h"
int main(void) {
std::vector<double> x;
x.push_back(53.0);
x.push_back(61.0);
x.push_back(49.0);
x.push_back(67.0);
x.push_back(55.0);
x.push_back(63.0);
std::vector<double> info = repeatFunction(std::bind(mean<double>, x));
return 0;
}
我是否需要以某种方式获取参数然后在repeatFunction函数中重新绑定它们?
编辑:它实际上似乎是std :: generate的一个问题,实际上并不是传递的函数调用。关于如何使用传递的函数调用生成工作的任何提示都将不胜感激。答案 0 :(得分:2)
std::generate
收到的谓词需要返回一个值:
[&] { return timer(function); }
// ^^^^^^