gpt4 book ai didi

c++ - 访问和存储/解析 std::chrono::duration::milliseconds (cpprest) 时使用什么类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:42 31 4
gpt4 key购买 nike

一个简化的例子:

//...

std::chrono::milliseconds _delay; //field in question

unsigned long getDelay() const
{
return _delay.count();
}

void setDelay(unsigned long delay)
{
_delay = std::chrono::milliseconds(delay);
}

json::value toJson() const
{
using namespace web;
json::value obj;
obj[delay] = json::value::number(_delay.count());

return obj;
}

bool fromJson(web::json::value value)
{
for (auto it = value.as_object().cbegin(); it != value.as_object().cend(); ++it)
{
const std::string& str = it->first;
const json::value& v = it->second;

if (str == "delay")
{
if (v.is_integer())
{
_id = v.as_number().to_uint64(); //was v.as_integer(); - thx Nicol Bogas
continue;
}
else
{
return false;
}
}

//...
}
}

我的类包含一堆 std::chrono::milliseconds 字段,代表相应的延迟。我想将这些值存储在类的 JSON 表示中。大多数 JSON 值仅使用标准内部类型,但 std::chrono::milliseconds 实现了 std::chrono::duration 模板。它有一个 count() 方法,该方法返回一个数量为 rep 类型的变量,在我的系统上是一个 typedef长长

代码必须是可移植的。从实用的角度来看,将 count() 的结果转换为简单的 long 并将其传递给 JSON 库有多安全?我是否正确地实现了访问器(unsigned long 类型)?在实践中,我通常存储 0 到 5000 范围内的延迟值,但没有什么可以阻止其他人编辑配置文件并在那里写入不正确的值,这可能会导致运行时错误和奇怪的行为。

附言需要明确的是——它不是 Rubber Duck 调试线程。我以前从未处理过“可能非常大”的值,而具有多个 libstdc++ 实现和 typedef 的 C++ 使它变得困难。我担心潜在的错误和陷阱。谢谢。

最佳答案

我建议定义您自己的持续时间类型“ double 秒”。然后可以将其提取为计数,并以清晰明确的含义传递给其他语言。一些示例代码(与 json 无关):

 TimePoint nowTime(std::chrono::system_clock::now());
typedef std::chrono::duration<double> FSeconds;
FSeconds delta = std::chrono::duration_cast<FSeconds>(nowTime - startTime);
ofs << "@" << std::fixed << delta.count() //...

所以在这里,delta.count 是秒,但它是实数而不是整数,所以毫秒或其他任何东西都以小数形式保留。

关于c++ - 访问和存储/解析 std::chrono::duration::milliseconds (cpprest) 时使用什么类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709258/

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