Преобразование boost :: chrono :: stable_clock :: time_point в std :: chrono :: stable_clock :: time_point

Есть ли какой-нибудь элегантный способ преобразования точки хронометражного усиления в эквивалент стандартной библиотеки?

1

Решение

Боюсь, вы не можете гарантировать конверсию, если вы не примете boost::chrono::steady_clock а также std::chrono::steady_clock иметь ту же эпоху. Если вы можете принять это, то может сработать что-то вроде следующего:

#include <boost/chrono.hpp>
#include <chrono>

/* Convert from boost::ratio to std::ratio */
template <typename T> struct conv_ratio;
template <std::intmax_t N, std::intmax_t D>
struct conv_ratio<boost::ratio<N, D>> {
using type = std::ratio<N, D>;
};
template <typename T>
using conv_ratio_t = typename conv_ratio<T>::type;

/* Convert from boost::duration to std::duration */
template <typename T> struct conv_duration;
template <typename Rep, typename Period>
struct conv_duration<boost::chrono::duration<Rep, Period>> {
using type = std::chrono::duration<Rep, conv_ratio_t<Period>>;
};
template <typename T>
using conv_duration_t = typename conv_duration<T>::type;

/* Convert from A::time_point to B::time_point.  This assumes that A
* and B are clocks with the same epoch. */
template <typename A, typename B>
typename B::time_point convert_timepoint_same_clock(
typename A::time_point const & tp)
{
return typename B::time_point(
conv_duration_t<typename A::time_point::duration>(
tp.time_since_epoch().count()));
}int main()
{
auto now_boost = boost::chrono::steady_clock::now();
auto now_std = convert_timepoint_same_clock<
boost::chrono::steady_clock, std::chrono::steady_clock>(now_boost);
}
1

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

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

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