Функция шаблона с параметром chrono :: duration и возвращаемым результатом chrono :: duration :: count

Я пытаюсь написать функцию, которая позволяет пользователю указать 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>();

0

Решение

что-то вроде этого:

#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 является глобальным — вы захотите сделать его членом вашего класса.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]