std :: chrono: добавить пользовательскую продолжительность в time_point

Следующий код компилируется (g++ 4.7.2):

#include <chrono>

typedef std::chrono::duration< double > double_prec_seconds;
typedef std::chrono::time_point< std::chrono::system_clock > timepoint_t;

void do_something( const timepoint_t& tm )
{
// ...
}

int main( int argc, char** argv )
{
timepoint_t t0 = std::chrono::system_clock::now();
timepoint_t t1 = t0 + std::chrono::seconds(3);

// timepoint_t t3 = t0 + double_prec_seconds(3.14);
auto t3 = t0 + double_prec_seconds(3.14);

do_something( t1 );
}

Моя проблема в том, что я не знаю, какой тип t3 есть. Это не timepoint_tи без комментирования строки с явно заданным типом не будет компилироваться. То же самое с вызовом функции: я не могу позвонить do_something с t3,

Итак, мои вопросы:

  • Почему конверсия не удалась?
  • Каков наилучший способ иметь длительность секунд с двойной точностью?

Я знаю, что могу использовать дополнительный актерский состав, подобный этому

// this works
timepoint_t t3 = t0 + std::chrono::duration_cast< std::chrono::milliseconds >(double_prec_seconds(3.14));

но я хочу избежать этого.

Заранее спасибо!

8

Решение

Преобразование не удается, потому что нет преобразования из

std::chrono::time_point< std::chrono::system_clock,
std::chrono::system_clock::duration >

в

std::chrono::time_point< std::chrono::system_clock,
std::chrono::duration< double > >

Самый простой способ — дать double_prec_seconds в качестве параметра шаблона для time_point, увидеть станд :: хроно :: time_point

typedef std::chrono::time_point< std::chrono::system_clock,
double_prec_seconds > timepoint_t;

тогда у вас уже есть подходящий тип для t3 а также do_something,

8

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector