Poniższy kod nie skompilować (g++ 4.7.2
):std :: Chrono: dodać niestandardowy okres do time_point
#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);
}
Moim problemem jest to, że nie wiem, jaki rodzaj t3
ma. Nie jest to timepoint_t
, a nieskomunikowanie linii z wyraźnie podanym typem nie doprowadziłoby do kompilacji. To samo z wywołaniem funkcji: Nie mogę zadzwonić pod numer do_something
z t3
.
Więc moje pytania to:
- Dlaczego konwersja powiedzie?
- Jaki jest najlepszy sposób na uzyskanie podwójnej precyzji w sekundach?
wiem, że mogę korzystać z dodatkowej obsady jak ten
// this works
timepoint_t t3 = t0 + std::chrono::duration_cast<std::chrono::milliseconds>(double_prec_seconds(3.14));
ale chcę, aby tego uniknąć.
Z góry dziękuję!
Wydrukowałem typ t3 przy pomocy typeid (t3) .name(), wypuszczając stdout do C++ filt, i napisałem: std :: chrono :: time_point>> '. Po prostu dla FYI. –
DZIĘKUJEMY za podpowiedź za pomocą narzędzia! Zasadniczo zrobiłem to samo, po prostu bez 'C++ filt' i nie dostałem nic" użytecznego "poza tajemniczą nazwą. 'C++ filt' wydaje się pomóc, nie wiedział tego. –