Форматирование времени с буст-хроно

Интересно, есть ли способ получить только время без распечатки единиц:

#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;
Другие вопросы по тегам