Я пытаюсь написать функцию, которая позволяет пользователю указать chrono::duration
лайк chrono::seconds
и вернуть результат chrono::duration::count
,
Я могу сделать это, используя следующую функцию шаблона:
template<typename D, typename Rep>
Rep getTimeSinceStart(){
return chrono::duration_cast<D>(chrono::steady_clock::now() - start).count();
};
Чтобы вызвать эту функцию, я должен указать тип для Rep
, Например, если у меня есть объект с именем timer
, если Rep
это long long
:
long long sinceStart = timer.getTimeSinceStart<chrono::seconds, long long>();
Однако есть ли способ просто указать chrono::duration
?
Я думал что-то вроде:
template<typename D>
D.rep getTimeSinceStart(){
return chrono::duration_cast<D>(chrono::steady_clock::now() - start).count();
};
Таким образом, я мог бы просто позвонить:
long long sinceStart = timer.getTimeSinceStart<chrono::seconds>();
что-то вроде этого:
#include <thread>
#include <iostream>
#include <chrono>
const std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
template<typename D>
typename D::rep getTimeSinceStart(){
return std::chrono::duration_cast<D>(std::chrono::steady_clock::now() - start).count();
};
int main (int argc, char **argv)
{
std::this_thread::sleep_for(std::chrono::seconds(2));
long long sinceStart = getTimeSinceStart<std::chrono::seconds>();
std::cout << "since start: " << sinceStart << std::endl;
}
в приведенном выше коде, start
является глобальным — вы захотите сделать его членом вашего класса.
Других решений пока нет …