私が以下に書いている関数は、関数の処理にかかる時間を計るために作られています。
// 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;
}
しかし、これにより、関数テンプレート「double 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
}
どのC++コンテナでも機能するようにtimeFunctionを修正するにはどうすればよいですか。どんな助けでも大歓迎です。