我目前有一个函数接受任何类型的向量和函数作为参数。传递的函数在执行时定时,并返回结果时间。使用传递的向量调用函数调用,但我想要做的是扩展调用,以便可以使用函数调用传递任意数量的参数,并且可以使用任意数量的参数调用它。该函数的代码如下所示,可在名为functions.h的文件中找到:
template<typename X, typename F>
double timer(std::vector<X> elements, F function) {
clock_t tstart, tend;
tstart = clock();
function(elements);
tend = clock();
return ((double)tend - tstart) / CLOCKS_PER_SEC;
}
函数mean只计算给定值的平均值(也在向量中)。 main.cpp文件包括对计时器的调用:
#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);
double time = timer(x, mean<double>);
std::cout << time << std::endl;
return 0;
}
我不知道如何,但我相信它可能来自main的电话需要改变?也许是这样的:
double time = timer(mean<double(x)>);
或者
double time = timer(fakeFunction<double(x, y)>);
将计时器功能更新为以下内容:
template<typename F>
double timer(F function) {
clock_t tstart, tend;
tstart = clock();
function();
tend = clock();
return ((double)tend - tstart) / CLOCKS_PER_SEC;
}
非常感谢任何帮助或提示。
答案 0 :(得分:2)
您可以使用std::bind
将参数绑定到回调:
double time = timer(std::bind(mean<double>, x));
答案 1 :(得分:1)
您可以使用可变参数模板:
template<typename F, typename ARGn...>
double timer(F function, ARGn&& ...argn)
{
clock_t tstart, tend;
tstart = clock();
function(std::forward<ARGn>(argn)...);
tend = clock();
return ((double)tend - tstart) / CLOCKS_PER_SEC;
}