【发布时间】:2015-10-25 23:43:11
【问题描述】:
我有以下代码:
template <typename L>
double measure( L&& action )
{
using namespace std::chrono;
high_resolution_clock::time_point start, end;
duration<double> timeSpan;
start = high_resolution_clock::now();
action();
end = high_resolution_clock::now();
timeSpan = duration_cast<milliseconds>(end - start);
return timeSpan.count();
}
我是这样使用它的:
cout << measure([](){ mergeSort<float>(array, 0, 10000); }) << endl << endl;
到目前为止,这是我知道传递 lambda 函数的唯一方法。但是,我试图让这个函数更完整,允许传递一个 ratio 作为模板参数,指定 timeSpan 模板的 ratio,以毫秒以外的其他度量返回时间......
所以,我想知道如何将多个模板参数传递给一个函数并一起传递一个 lambda。我应该在模板上指定什么作为 lambda 的类型,或者我还能做些什么来实现这样的目标:
timer::measure<ratio<1,1000>>([](){ mergeSort<float>(array, 0, 10000); })
?
【问题讨论】:
-
模板参数
std::ratio<1, 1000>如何在measure中使用? -
函数的倒数第二行是
timeSpan = duration_cast<duration<double, RATIO>>(end - start);