gpt4 book ai didi

c++ - 将 lambda 传递给模板函数

转载 作者:太空狗 更新时间:2023-10-29 23:14:32 25 4
gpt4 key购买 nike

我有以下代码:

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 函数的唯一方法。但是,我试图使这个功能更完整,允许传递比率 <> 作为模板参数,指定 timeSpan 模板的比率 <>,以毫秒以外的其他度量返回时间......

所以,我想知道如何将多个模板参数传递给一个函数并同时传递一个 lambda。我应该在模板上指定什么作为 lambda 的类型,或者我还能做些什么来实现这样的目标:

    timer::measure<ratio<1,1000>>([](){ mergeSort<float>(array, 0, 10000); })

?

最佳答案

你可以有这样的东西:

template <typename Ratio, typename L>
// ^^^^^^^^^^^^^^^^
double measure( L&& action )
{
using namespace std::chrono;

auto start = high_resolution_clock::now();
action();
auto end = high_resolution_clock::now();

auto timeSpan = duration_cast<duration<double, Ratio>>(end - start);
// ^^^^^^^^^^^^^^^^^^^^^^^
return timeSpan.count();
}

Live demo

关于c++ - 将 lambda 传递给模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com