Моя цель - получить количество секунд в double
, содержащее количество времени, затрачиваемое некоторыми функциями.
Следующий код работает, но многословность периодов времени абсурдна.
Во-первых, я бы предположил, что длительность <> будет в единицах «1», но поскольку now()
в ratio<1,1000000000>
длительность тоже, я прав?
У меня проблема понимание того, почему ratio
не имеет, например, оператора неявного преобразования в double
; если я просто использую chrono::high_resolution_clock::period
сам по себе в числовом контексте, я удивляюсь, почему он просто не делит для меня деление?
auto timepointBegin = chrono::high_resolution_clock::now();
// do something worth timing
auto timepointEnd = chrono::high_resolution_clock::now();
chrono::duration<double> dur = timepointEnd - timepointBegin;
printf( "Total test time: %f sec", dur.count() *
chrono::high_resolution_clock::period::num /
chrono::high_resolution_clock::period::den );
Я читал, что std::chrono::seconds
в основном typedef duration <long,ratio<1,1>>
, но я использую это для замены типа dur
ниже выдается ошибка tstopMT.cxx:67:38: error: conversion from 'duration<[...],ratio<[...],1000000000>>' to non-scalar type 'duration<[...],ratio<[...],1>>' requested
. Может быть, мои глаза подводят меня, но они похожи на конвертируемые типы? Кроме того, я думаю, что это было бы катастрофой, так как он хранит секунды в int, верно?
Так что я попытался сделать тип chrono::duration<double,ratio<1,1>>
вместо этого, но тоже не радость; это не учитывает тот факт, что now () возвращает наносекунды. Почему нет?