Следующий код компилируется (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));
но я хочу избежать этого.
Заранее спасибо!
std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<double, std::ratio<1l, 1000000l> > >
. Просто к вашему сведению. - person John Zwinck   schedule 24.02.2013c++filt
и не получил ничего полезного, кроме загадочного имени.c++filt
вроде помогает, не знал. - person wal-o-mat   schedule 24.02.2013