Форматирование времени с буст-хроно
Интересно, есть ли способ получить только время без распечатки единиц:
#include <boost/chrono.hpp>
#include <iostream>
boost::chrono::milliseconds sumGlobal;
int main() {
boost::chrono::high_resolution_clock::time_point t1 ;
boost::chrono::high_resolution_clock::time_point t2 ;
for (i=0;i<10;i++)
{
t1 = boost::chrono::high_resolution_clock::now();
f(); //to waste time
t2 = boost::chrono::high_resolution_clock::now();
sumGlobal += (boost::chrono::duration_cast<boost::chrono::milliseconds>(t2-t1));
}
std::cout << sumGlobal << "\n";
}
Вывод:
123 milliseconds
Я хотел бы получить только
123
Какие-либо решения?
1 ответ
Решение
milliseconds
является шаблоном реализации duration
шаблон класса:
typedef duration<boost::int_least64_t, milli> milliseconds;
Оператор вывода потока <<
перегружен для duration
учебный класс:
template <class CharT, class Traits, class Rep, class Period>
std::basic_ostream<CharT, Traits>&
operator<<(std::basic_ostream<CharT, Traits>& os, const duration<Rep, Period>& d);
Учитывая параметры шаблона вашего случая, предоставленная версия по умолчанию добавляет единицу "миллисекунды" в виде текста.
Но у класса продолжительности есть метод count
который вернет вам продолжительность в указанной единице (в вашем случае миллисекунды) в качестве указанного целочисленного типа (rep
введите параметр, в вашем случае boost::int_least64_t
):
constexpr rep count() const;
Вы можете вывести это целое число в своем собственном формате (в вашем случае это просто чистое число):
std::cout << sumGlobal.count() << std::endl;