Auch nur zu beginnen versucht, bekomme ich einen Fehler mit diesem Code:Wie schreibe ich eine Funktion, die eine Std :: Chrono :: Dauer (1ms, 4s, 7h) dauert und die Sekunden als Float bekommt?
note: candidate template ignored: could not match 'double' against 'long'
::
#include <numeric>
#include <chrono>
using namespace std::chrono_literals;
// how to write a function that will take any duration and turn it
// into a float representation of seconds?
template <class T>
void go(std::chrono::duration<double, T> d) {
// what I want to do (that may not work because I haven't gotten this far):
float seconds = std::chrono::duration_cast<std::chrono::seconds>(d);
}
int main()
{
go(1ms);
go(1s);
}
'count' scheint nicht sehr passend benannt zu sein. :) –
Ich habe eine Funktion, die bei Timeout erstellt und wollte nur sagen können. Timeout (1 ms) oder Timeout (1 min). Ich wusste nicht, dass du es einfach als Dauer akzeptieren kannst. das macht die Dinge so viel besser, ohne eine Vorlage verwenden zu müssen. – xaxxon
Warum das funktioniert: Wenn eine 'Dauer' 'nicht' Dauer 'an' go() 'übergeben wird, versucht der Compiler' duration 'in eine' Dauer '' 'duration ''s zu konvertieren _konvertierende Konstruktoren_. Einer der Konversionskonstruktoren der "Dauer" wird templatisiert, um jede Art von Dauer zu akzeptieren. Dies wird verwendet, um 'duration 'in' duration 'zu konvertieren, und alles funktioniert dann wie erwartet. –
md5i