[英]A function to execute any function with any types and numbers of parameter in C++
我目前有一個函數接受任何類型的向量和函數作為參數。 傳遞的函數在執行時定時,並返回結果時間。 使用傳遞的向量調用函數調用,但我想要做的是擴展調用,以便可以使用函數調用傳遞任意數量的參數,並且可以使用任意數量的參數調用它。 該函數的代碼如下所示,可在名為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;
}
我不知道如何,但我相信它可能在主要的電話中需要改變? 也許是這樣的:
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;
}
任何幫助或提示將不勝感激。
您可以使用可變參數模板:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.