如何将 std::chrono::system_clock::duration 转换为 struct timeval

2024-03-04

标题说明了一切。

我必须实现一个接收 std::chrono::system_clock::duration 值的函数,并且需要将其转换为 timeval 结构,以便我可以将其传递给某些系统函数。


更一般的实施。

template<typename Duration>
void to_timeval(Duration&& d, struct timeval & tv) {
    std::chrono::seconds const sec = std::chrono::duration_cast<std::chrono::seconds>(d);

    tv.tv_sec  = sec.count();
    tv.tv_usec = std::chrono::duration_cast<std::chrono::microseconds>(d - sec).count();
}

UPDATE:

单独的方法,例如to_timeval()都不太方便。超载电源在哪里?我们刚刚硬编码了类型timeval进入函数名称to_timeval()。这不是 C++ 的方式。我想通过struct timeval例如,std::chrono::duration_cast()并得到我的chrono-结果,反之亦然。

所以,我们可以扩展std::chrono::duration_cast(当然,风险由您自己承担)。享受。

namespace std {
namespace chrono {
namespace detail {

template<typename From, typename To>
struct posix_duration_cast;

// chrono -> timeval caster
template<typename Rep, typename Period>
struct posix_duration_cast< std::chrono::duration<Rep, Period>, struct timeval > {

    static struct timeval cast(std::chrono::duration<Rep, Period> const& d) {
        struct timeval tv;

        std::chrono::seconds const sec = std::chrono::duration_cast<std::chrono::seconds>(d);

        tv.tv_sec  = sec.count();
        tv.tv_usec = std::chrono::duration_cast<std::chrono::microseconds>(d - sec).count();

        return std::move(tv);
    }

};

// timeval -> chrono caster
template<typename Rep, typename Period>
struct posix_duration_cast< struct timeval, std::chrono::duration<Rep, Period> > {

    static std::chrono::duration<Rep, Period> cast(struct timeval const & tv) {
        return std::chrono::duration_cast< std::chrono::duration<Rep, Period> >(
                    std::chrono::seconds(tv.tv_sec) + std::chrono::microseconds(tv.tv_usec)
                    );
    }

};

}

// chrono -> timeval    
template<typename T, typename Rep, typename Period>
auto duration_cast(std::chrono::duration<Rep, Period> const& d)
-> std::enable_if_t< std::is_same<T, struct timeval>::value, struct timeval >
{
    return detail::posix_duration_cast< std::chrono::duration<Rep, Period>, timeval >::cast(d);
}

// timeval -> chrono
template<typename Duration>
Duration duration_cast(struct timeval const& tv) {
    return detail::posix_duration_cast< struct timeval, Duration >::cast(tv);
}

} // chrono
} // std

这只是一个例子。作为替代方案,我们可以实现自己的duration_cast()在某些情况下将其转发到std::chrono::duration_cast().

我们还记得struct timespec.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 std::chrono::system_clock::duration 转换为 struct timeval 的相关文章

  • C 中的变量定义是什么意思[重复]

    这个问题在这里已经有答案了 你们能告诉我 这在 C 中意味着什么吗 define Privileged Data Privileged Data static int dVariable 编译器对变量进行寻址有特殊意义吗 这只是一个宏Pri
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • C# 中附加/分离事件处理程序的不同方式有什么区别

    我的问题有两个部分 首先 我们可以通过以下两种方式附加事件处理程序 myObject MyEvent new EventHandler MyHandler myObject MyEvent MyHandler 据我了解 这两者是等价的 在第
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 不要声明只读可变引用类型 - 为什么不呢?

    我一直在阅读这个问题 https stackoverflow com questions 2274412 immutable readonly reference types fxcop violation do not declare r
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • GCC 的代码覆盖率选项如何工作?

    考虑以下命令 gcc fprofile arcs ftest coverage main c 它生成文件 main gcda gcov 将使用该文件来生成覆盖率分析 那么main gcda是如何生成的呢 仪器仪表是如何完成的 我可以看到检测
  • 如何利用foreman向暴发户导出?

    我正在尝试将我的应用程序导出到另一种流程管理格式 系统 具体来说 upstart http upstart ubuntu com 在这样做的过程中 我遇到了许多障碍 主要是由于缺乏文档 作为非 root 用户 我运行了以下命令 如图所示he
  • System.Json.DLL 在哪里?

    我试图遵循一些在 Http 客户端中使用 JSON 的示例 但它们引用了我找不到的 System Json DLL 看这个参考 http msdn microsoft com en us library system json jsonob
  • django - 一个模板中有 2 个视图

    我有两个不同的视图 它们从数据库获取过滤数据 我必须在一个模板文件 admin html 中使用这些视图 但我不能同时在一页上使用多个视图 这是我的观点1 draft list Post objects filter isdraft Tru
  • 调整字体大小以填充 UITextView?

    如何设置 UITextView 中文本的字体大小 使其填充整个 UITextView 我希望用户输入文本 然后让文本填充整个 UITextView 任何帮助表示赞赏 我已经转换了痴呆症的答案 https stackoverflow com
  • 在 Android 中创建手势

    你好 我正在关注这个教程 http www vogella de articles AndroidGestures article html http www vogella de articles AndroidGestures arti
  • 为什么 Codeception 为每个 test* 方法创建新的 \Test 实例?

    作为基础 我使用 Codeception TestCase Test 类 我注意到 对于类中定义的每个 test 方法 codeception 都会重新创建 TestCase Test 类 But Why 结果我不能使用类字段 public
  • contenteditable 选择文本不起作用

    我面临以下问题 当我尝试在 a 中选择文本时contenteditable元素并且选择的结束是元素内容的开始 那么不会触发 select 事件 并且没有Selection and Range对象 有人可以就为什么会发生这种情况或如何防止这种
  • 如何在 docker 镜像中配置 Let's 为 nginx 加密证书?

    我知道怎么做配置让我们为 nginx 加密 https www digitalocean com community tutorials how to secure nginx with let s encrypt on ubuntu 14
  • Pandas 多索引计数级别

    数据 index A aa aaa A aa aab B bb bbb B bb bbc C cc ccc values 0 07 0 04 0 04 0 06 0 07 s pd Series data values index pd M
  • 如何阻止 Windbg 成为交互式调试器?

    正确的撤消方法是什么Windbg I在 Vista Win7 上 难道只是删除 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows NT CurrentVersion AeDebug 中的注册表项那么
  • React/Redux 应用程序中组件的权限检查

    我正在尝试与构建 React 应用程序的团队合作 并尝试找出创建 高阶 React 组件 一个包装另一个组件 的最佳方法 以与 Redux 数据存储结合执行身份验证 到目前为止 我的方法是创建一个由一个函数组成的模块 该函数根据是否存在经过
  • 接收和处理电子邮件:Heroku、Sendgrid,可能还有 Mailman

    我的应用程序为每个用户创建一个唯一的电子邮件 用户将电子邮件发送到该地址进行处理 使用 Sendgrid 我已将传入电子邮件通过管道传输到我的域 托管在 Heroku 上 的地址 site com receive email 我使用 收件人
  • JellyBean 上的向上导航损坏了?

    源代码可在此处获取 https github com novemberox NavigationTest https github com novemberox NavigationTest这是该示例的修改版本 http developer
  • StretchDIBits 看起来很慢,有没有更快的 API?

    我想在 HDC 上绘制一个相同大小的 dib 我在用 des 和 src 大小相同 StretchDIBits hdc des left des top des right des left des bottom des top src l
  • sizeof 的成本是多少?

    sizeof 的成本是多少 我期望 sizeof someclass 可以在编译时知道 sizeof someStaticArray 可以在编译时知道 sizeof someDynamicArray 可以not在编译时已知 那么最后一个案例
  • 在 C++ 中将成员函数指针“转换”为函数指针的最简单方法是什么?

    我想为 STL 算法的 comp 参数提供一个成员函数 例如 lower bound Compare comp comp 函数访问非静态成员字段 因此它本身必须是非静态成员 但非静态成员函数指针的类型与普通函数指针的类型不同 解决这个问题的
  • 使用 install_github 安装 SparkR 包时出错

    我正在尝试使用SparkRR 中的包 我有所有依赖包 例如devtools Rtools exe etc 当我尝试以下命令时 install github amplab extras SparkR pkg subdir pkg 我收到以下错
  • 在单个主机上使用多个密钥时 SSH 使用错误的密钥

    我目前正在尝试为单个主机创建多个密钥 但遇到了一个奇怪的问题 我决定使用的第一个 SSH 密钥成为我可以使用的唯一 SSH 密钥 然后我必须重新启动笔记本电脑才能更改 SSH 密钥 我使用的是配备 Mojave v10 14 6 的 Mac
  • 如何将 std::chrono::system_clock::duration 转换为 struct timeval

    标题说明了一切 我必须实现一个接收 std chrono system clock duration 值的函数 并且需要将其转换为 timeval 结构 以便我可以将其传递给某些系统函数 更一般的实施 template