Các mã sau đây không biên dịch (g++ 4.7.2
):std :: chrono: thêm thời gian tùy chỉnh để 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);
}
Vấn đề của tôi là tôi không biết những gì loại t3
có. Nó không phải là timepoint_t
và không nhận xét được dòng có loại được đưa ra một cách rõ ràng sẽ không biên dịch. Cùng với lời gọi hàm: Tôi không thể gọi do_something
với t3
.
Vì vậy, câu hỏi của tôi là:
- Tại sao việc chuyển đổi thất bại?
- Cách tốt nhất để có thời lượng giây chính xác gấp đôi là gì?
tôi biết rằng tôi có thể sử dụng một dàn diễn viên phụ như thế này
// this works
timepoint_t t3 = t0 + std::chrono::duration_cast<std::chrono::milliseconds>(double_prec_seconds(3.14));
nhưng tôi muốn tránh điều này.
Cảm ơn bạn trước!
Tôi đã in loại t3 bằng cách sử dụng typeid (t3) .name(), đường dẫn stdout tới C++ filt và nó cho biết 'std :: chrono :: time_point>> '. Chỉ là FYI. –
THANK YOU cho gợi ý với công cụ này! Tôi đã làm về cơ bản giống nhau, chỉ cần không có 'C++ filt' và không có gì" hữu ích "ngoại trừ một tên bí ẩn. 'C++ filt' dường như giúp đỡ, không biết điều đó. –