다음 코드는 컴파일 않습니다 (g++ 4.7.2
) 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);
}
내 문제는 내가 t3
이 무슨 방식을 모르는 것입니다. 그것은 timepoint_t
이 아니며 명시 적으로 제공된 유형의 행을 주석 해제하면 컴파일되지 않습니다. 함수 호출과 동일 : t3
으로 do_something
으로 전화 할 수 없습니다.
그래서 제 질문은 다음과 같습니다
- 왜 변환이 실패 하는가?
- 두 배의 초 기간을 갖는 가장 좋은 방법은 무엇입니까?
는 나는이
// this works
timepoint_t t3 = t0 + std::chrono::duration_cast<std::chrono::milliseconds>(double_prec_seconds(3.14));
같은 추가 캐스트를 사용할 수 있다는 것을 알고 있지만이를 방지하고자합니다.
미리 감사드립니다. 가장 쉬운 방법은 time_point
에 템플릿 매개 변수로 double_prec_seconds
을 제공하는 것입니다
std::chrono::time_point< std::chrono::system_clock,
std::chrono::duration<double> >
에
std::chrono::time_point< std::chrono::system_clock,
std::chrono::system_clock::duration >
로부터 변환 참조가 없기 때문에
typeid (t3) .name()을 사용하여 t3 유형을 인쇄하고 C++ filt로 stdout을 파이프했으며'std :: chrono :: time_point>>. 그냥 참고하시기 바랍니다. –
도구로 힌트를 주셔서 감사합니다! 나는 기본적으로'C++ filt'를 사용하지 않고 똑같은 일을했으며 암호명을 제외하고는 "유용함"을 얻지 못했습니다. 'C++ filt'가 도움이되는 것 같았습니다. –