簡體   English   中英

在C ++中用任何類型和數量的參數執行任何函數的函數

[英]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;
}

任何幫助或提示將不勝感激。

您可以使用std::bind將參數std::bind到回調:

double time = timer(std::bind(mean<double>, x));

您可以使用可變參數模板:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM