我在下面寫的函數是用來處理一個函數需要多長時間的。將函數作爲參數傳遞給C++中的模板?
// return type for func(pointer to func)(parameters for func), container eg.vector
clock_t timeFuction(double(*f)(vector<double>), vector<double> v)
{
auto start = clock();
f(v);
return clock() - start;
}
這是我想在我的timeFunction中測試的功能。
template<typename T>
double standardDeviation(T v)
{
auto tempMean = mean(v); //declared else where
double sq_sum = inner_product(v.begin(), v.end(), v.begin(), 0.0);
double stdev = sqrt(sq_sum/v.size() - tempMean * tempMean);
return stdev;
}
standardDiviation用模板製作,因此它可以接受任何C++容器中,我想要做與timeFunction一樣的,所以我嘗試以下。
template<typename T>
clock_t timeFuction(double(*f)(T), T v)
{
auto start = clock();
f(v);
return clock() - start;
}
但就像不能使用函數模板這給了我錯誤的「雙standardDiviation(T)」,並不能推導出模板參數爲「重載函數」
我這是怎麼叫的主要功能。
int main()
{
static vector<double> v;
for(double i=0; i<100000; ++i)
v.push_back(i);
cout << standardDeviation(v) << endl; // this works fine
cout << timeFuction(standardDeviation,v) << endl; //this does not work
}
我該如何修復timeFunction,以便它可以與任何C++容器一起工作。任何幫助是極大的讚賞。
您正試圖傳遞一個指向函數的模板。但是沒有這樣的事情存在。 –
你使用什麼編譯器?似乎在g ++上工作正常4.6.3 – Csq
visual studio 2012 – user1973206