Der folgende Code time_point nicht kompiliert (g++ 4.7.2
):std :: Chrono: add benutzerdefinierte Dauer
#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);
}
Mein Problem ist, dass ich nicht weiß, welche Art t3
hat. Es ist nicht timepoint_t
, und das Unkommentieren der Zeile mit dem explizit angegebenen Typ würde nicht kompiliert. Das Gleiche gilt für den Funktionsaufruf: Ich kann do_something
nicht mit t3
anrufen.
Also meine Fragen sind:
- Warum versagt die Umwandlung?
- Was ist der beste Weg, um Sekunden mit doppelter Genauigkeit zu haben?
Ich weiß, dass ich einen zusätzlichen Guss wie diese
// this works
timepoint_t t3 = t0 + std::chrono::duration_cast<std::chrono::milliseconds>(double_prec_seconds(3.14));
verwenden kann, aber ich möchte, dies zu vermeiden.
Vielen Dank im Voraus!
Ich druckte den Typ von t3 mit typeid (t3) .name(), Piping stdout zu C++ filt, und es sagte 'std :: chrono :: time_point>> '. Nur zu deiner Information. –
DANKE für den Hinweis mit dem Werkzeug! Ich habe im Grunde genommen das Gleiche gemacht, nur ohne 'C++ filt' und habe nichts" nützliches "außer einem kryptischen Namen. 'C++ filt' scheint zu helfen, wusste das nicht. –