我正在尝试根据它作为参数获取的 lambda 函数的返回类型进行模板专业化。 目标是拥有一个函数,我可以将 lambda(或其他函数,如果可能)传递给该函数,让该函数测量该 lambda 的运行时间并返回 lambda 结果。当 lambda 没有返回值(void)时,问题就来了。
现在我使用两个函数,一个用于 void 返回类型,第二个用于所有其他返回类型。
template <typename F, typename ... Args>
static void measured_run(double& time, F f, Args&&...args)
{
auto start = boost::posix_time::microsec_clock::local_time();
f(std::forward<Args>(args)...);
auto end = boost::posix_time::microsec_clock::local_time();
time += (end - start).total_milliseconds();
}
template <typename F, typename ... Args>
static auto measured_run_ret_val(double & time, F f, Args&&...args) -> decltype(f(std::forward<Args>(args)...))
{
auto start = boost::posix_time::microsec_clock::local_time();
auto result = f(std::forward<Args>(args)...);
auto end = boost::posix_time::microsec_clock::local_time();
time += (end - start).total_milliseconds();
return result;
}
我希望能够像这样使用它:
double time;
measured_run(time, []() {return false; });
measured_run(time, []() {printf("void\n"); });
现在我正在使用 c++14,但如果 17/20 有解决方案,我也会很好奇。
感谢您的任何建议。