Some weeks ago I asked if there is the need for a function which measures the execution time of another function, but nobody responded. Could you please give me a short feedback.
template <typename Duration, typename Result>
struct measurement_result {
Duration duration;
Result result;
};
template <
typename Clock = std::chrono::high_resolution_clock,
typename F, typename... Args>
auto measure_ignore_result(F f, Args&&... args)
{
auto const start = Clock::now();
f(std::forward<Args>(args)...);
auto const stop = Clock::now();
auto const duration = stop - start;
return measurement_result<decltype(duration), std::monostate>{duration};
template <
typename Clock = std::chrono::high_resolution_clock,
typename F, typename... Args,
std::enable_if_t<std::is_void_v<std::result_of_t<F(Args...)>>, bool> = true>
auto measure(F f, Args&&... args)
{
return measure_ignore_result(
std::forward<F>(f), std::forward<Args>(args)...);
typename Clock = std::chrono::high_resolution_clock,
typename F, typename... Args,
std::enable_if_t<!std::is_void_v<std::result_of_t<F(Args...)>>, bool> = true>
auto measure(F f, Args&&... args)
{
auto const start = Clock::now();
auto const result = f(std::forward<Args>(args)...);
auto const stop = Clock::now();
auto const duration = stop - start;
return measurement_result{duration, result};
}
Usage:
return i <= 1 ? i : fib(i-1) + fib(i-2);
}
auto main() -> int
{
std::cout << std::chrono::duration<double>(measure(fib, 42).duration).count();
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals