c++ - 不确定如何将 duration_cast 用作宏函数

标签 c++

我不确定如何使用 duration_cast 及其语法。 duration_cast 可以只在 std:chrono 的成员之间转换吗?是否可以用来将整数或 float 转换为时间点? 我也在做一个项目,我试图使用持续时间找到当前时间和初始时间之间的持续时间,但我一直收到错误 No matching function for call to 'duration_cast'

#define time std::chrono::high_resolution_clock
#define duration(x, y) std::chrono::duration_cast<std::milli>(x-y)
    time::time_point c_time = time::now();
    time::time_point start;

        auto dur = duration(c_time, start);

最佳答案

几乎没有理由用现代 C++ 接触预处理器。它会混淆您的代码并使其变得脆弱(显然 #include 除外)。

您的代码可以重写为:

using time = std::chrono::high_resolution_clock;
auto duration = [](auto x, auto y) { return std::chrono::duration_cast<std::milli>(x-y); };
time::time_point c_time = time::now();
time::time_point start;
auto dur = duration(c_time, start);

您的代码的问题是 std::milli是一个ratio 而不是duration。您正在寻找std::chrono::milliseconds反而。代码现在可以编译:

using time = std::chrono::high_resolution_clock;
auto duration = [](auto x, auto y) { return std::chrono::duration_cast<std::chrono::milliseconds>(x-y); };
time::time_point c_time = time::now();
time::time_point start;
auto dur = duration(c_time, start);

关于c++ - 不确定如何将 duration_cast 用作宏函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57009866/

相关文章:

c++ - 检测文本文件编码

c++ - 如何在 C++ 中避免 GOTO

包含 std::list 的结构的 C++ 初始化

c++ - 为什么 2^80 字节的内存分配不会失败?

c++ - 为什么有些东西在 C++ 中留下未定义的行为?如果其中一些在标准中预先定义不是更好吗?

c++ - 如何定义一个包含可变维度 vector 的类以及如何使用这个类?

C++:分配对齐矩阵

c++ - malloc() 和 realloc() 有什么区别?

c++ - dup2 : write() redirected but not fprintf() or puts()

c++ - 如何通过 c_str() 库 API 使用 C++ 流。