【问题标题】:Unable to typedef std::chrono::microseconds to override its definition to change its underlying type无法 typedef std::chrono::microseconds 覆盖其定义以更改其基础类型
【发布时间】:2019-07-15 10:50:14
【问题描述】:

在 libc++ 中 std::chrono::microseconds 被定义为

std::chrono::duration<long long, std::micro>

对于 64 位平台,long long 定义会导致与 int64_t 的许多冲突,因为之前为相同定义的代码。

在 gnustl 中,早期的 std::chrono::microseconds 是用 in64_t 类型定义的。

我想将现有的微秒定义覆盖到 gnustl 版本,例如:

typedef std::chrono::duration<int64_t, std::ratio<1, 1000000>> std::chrono::microseconds;

or

#define std::chrono::microseconds std::chrono::duration<int64_t, std::ratio<1, 1000000>>;

我如何做到这一点。 Typdef 和 #define 在我们希望重新定义的一侧有 std:: 和 chrono:: 时给出语法错误,即 std::chrono::microseconds?

【问题讨论】:

  • 你能描述一下冲突吗?有人可能有比重新定义标准类型更好的解决方案。

标签: c++ std typedef chrono libc++


【解决方案1】:

你不能。这些类型不归您所有。这就是他们在命名空间std 中的意思。这不是你的代码。

如果您想定义自己的别名,请在自己的命名空间中进行。

除此之外,您的工具链以这种特定方式实现标准库可能是有原因的。即使允许,您也可能无法在不重写标准库实现的其他块的情况下“让它像 gnustl 版本”。

如果您认为 libc++ 在 64 位平台上存在导致 std::chrono::microseconds 无法编译的错误,您可以向 libc++ 开发人员提出错误。但是,您应该首先确保您的理论是正确的,而且在天文上不太可能是正确的。检查您的其他代码的原因。

【讨论】:

  • 谢谢,是的,不是说这是一个错误,我明白你在说什么,只是上面的 typedef 是我想在几个地方实现的目标
  • @AmritAyyar 您的my::microseconds 类型别名将在您需要的任何地方隐式转换为std::chrono::microseconds。所以在你需要它的几个地方,只需使用my::microseconds
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
相关资源
最近更新 更多