首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::chrono & Boost.Units

std::chrono & Boost.Units
EN

Stack Overflow用户
提问于 2013-10-17 04:01:35
回答 2查看 1.1K关注 0票数 17

我正在从事一个软件设计,在这个软件设计中,我想利用Boost.Units。我想使用的一些单位代表时间,然而,我倾向于使用C++11 std::chrono单位,因为它们是标准的。

我想知道Boost.Unitschrono之间是否有任何干净的集成,或者我是否必须求助于编写自己的转换器,并通过在类型之间复制标量值来失去类型安全性。

对于这个问题,有没有什么最佳实践?

EN

回答 2

Stack Overflow用户

发布于 2018-03-15 21:27:43

如果您只想将std::chrono时长转换为boost时间量,您可以使用以下模板函数:

代码语言:javascript
复制
using time_quantity = boost::units::quantity<si::time, double>;

template<class _Period1, class _Type>
time_quantity toBoostTime( chrono::duration<_Type, _Period1> in)
{
  return time_quantity::from_value(double(in.count()) * double(_Period1::num) / double(_Period1::den) );
}

需要注意的一点是,返回的time_quantity将始终以秒为单位,并且存储类型为double类型。如果这两个中的任何一个是问题,模板都可以调整。

示例:

代码语言:javascript
复制
namespace bu = boost::units;
namespace sc = std::chrono;
using time_quantity_ms = bu::quantity<decltype(bu::si::milli * bu::si::second), int32_t>;

std::cout << "Test 1: " << toBoostTime(sc::seconds(10)) << std::endl;
std::cout << "Test 2: " << toBoostTime(sc::milliseconds(10)) << std::endl;
std::cout << "Test 3: " << static_cast<time_quantity_ms>(toBoostTime(sc::milliseconds(10))) << std::endl;

/* OUTPUT */
Test 1: 10 s
Test 2: 0.01 s
Test 3: 10 ms
票数 2
EN

Stack Overflow用户

发布于 2016-05-24 10:12:27

这可能不是一个完美的答案,但boost::chrono提供了一个如何将其与他们在example itself (devel) (version at time of writing)中定义的单位系统集成的示例。

本质上,基于boost.units examples for quaternion and complex numbers,应该可以为std::chrono单元定义相同的函数,尽管它可能需要为新的用户定义单元添加额外的代码。

还有一个类似的question regarding boost::date_time,虽然略有不同,但也可能包含有用的信息。

很抱歉,这不是一个完整的答案,但也许这将是一个其他人可以完成的开始!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19412678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档