gpt4 book ai didi

c++ - std::chrono & Boost.Units

转载 作者:IT老高 更新时间:2023-10-28 22:22:38 29 4
gpt4 key购买 nike

我正在开发一个我想利用 Boost.Units 的软件设计。我想使用的一些单位表示时间,但是,我倾向于使用 C++11 std::chrono 单位,因为它们是标准的。

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

有没有针对这个问题的最佳实践?

最佳答案

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

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 类型。如果这两个中的任何一个有问题,则可以调整模板。

例子:

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

关于c++ - std::chrono & Boost.Units,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412678/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com