std::chrono::duration_cast<> - konwersja na typ o mniejszej precyzji VS2013
Ostatnio zmodyfikowano 2016-01-18 02:06
carlosmay Temat założony przez niniejszego użytkownika |
std::chrono::duration_cast<> - konwersja na typ o mniejszej precyzji VS2013 » 2016-01-17 16:37:36 Przykład: #include <ratio> #include <chrono> #include <iostream>
int main() { using namespace std::chrono; milliseconds ms( 7255042 ); hours hh = duration_cast < hours >( ms ); minutes mm = duration_cast < minutes >( ms % hours( 1 ) ); seconds ss = duration_cast < seconds >( ms % minutes( 1 ) ); milliseconds msec = duration_cast < milliseconds >( ms % seconds( 1 ) ); }
Wróciłem ostatnio do VS2013, bo następca robi mi dużo problemów. Do rzeczy. Kod powyżej skompilowany na VS2015 działa OK, natomiast na VS2013 wypisuje taki błędy. error C2446: ':' : no conversion from 'std::chrono::duration<int,std::ratio<0x0e10,0x01>>' to '__int64' c:\program files (x86)\microsoft visual studio 12.0\vc\include\type_traits 1446 1 ConsoleApplication1 error C2784: 'enable_if<std::chrono::_Is_duration<_Ty>::value,_To>::type std::chrono::duration_cast(const std::chrono::duration<_Rep,_Period> &)' : could not deduce template argument for 'const std::chrono::duration<_Rep,_Period> &' from '__int64' c:\users\...\projects\consoleapplication1\consoleapplication1\source.cpp 72 1 ConsoleApplication1
Nie wiem jak inaczej skonkretyzować typ dla std::chrono::duration_cast<>, aby było możliwe skonwertowanie. |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2016-01-17 21:14:21 Zrobiłem to z pomocą stałych, choć wolałbym móc wykorzystać typy udostępnione w bibliotece <chrono>. #include <iostream> #include <chrono> #include <ratio> #include <iomanip>
const long long MSEC_PER_SEC = 1000; const long long MSEC_PER_MIN = 60 * MSEC_PER_SEC; const long long MSEC_PER_HOUR = 60 * MSEC_PER_MIN; const long long MSEC_PER_DAY = 24 * MSEC_PER_HOUR;
void showFormatTime( std::chrono::hours hr, std::chrono::minutes mn, std::chrono::seconds sc, std::chrono::milliseconds msc ) { cout << "Sformatowany czas: " << std::setfill( '0' ) << std::setw( 2 ) << hr.count() << ":" << std::setw( 2 ) << mn.count() << ":" << std::setw( 2 ) << sc.count() << ":" << std::setw( 2 ) << msc.count() << endl; }
int main() { using namespace std::chrono; milliseconds ms( 7255042 ); hours hh = duration_cast < hours >( ms ); minutes mm = duration_cast < minutes >( ms % MSEC_PER_HOUR ); seconds ss = duration_cast < seconds >( ms % MSEC_PER_MIN ); milliseconds msec = duration_cast < milliseconds >( ms % MSEC_PER_SEC ); showFormatTime( hh, mm, ss, msec ); } Nie rozumiem czemu (ms % MSEC_PER_HOUR) działa, a (ms % hours( 1 )) nie. |
|
Monika90 |
» 2016-01-17 23:19:08 |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2016-01-18 02:06:11 czy ten kod się kompiluje? |
Niestety nie. Wykrzykuje error C2228: left of '.count' must have class/struct/union . Moim zdaniem powinieneś podać prostszy przykład |
Chciałem, żeby służył też innym. Przyjmuję sugestię do wiadomości. Dziękuję. |
|
« 1 » |