无法键入 def std::chrono::microseconds 以覆盖其定义以更改其基础类型

Unable to typedef std::chrono::microseconds to override its definition to change its underlying type

本文关键字:定义 类型 覆盖 microseconds def chrono std      更新时间:2023-10-16

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

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

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

在 gnustl 早期std::chrono::microsecondsint64_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

你不能。这些类型不属于您。这就是它们在命名空间std中的意思。这不是你的代码。

如果要定义自己的别名,请在自己的命名空间中执行此操作。

撇开其他任何事情不谈,您的工具链以这种特定方式实现标准库可能是有原因的。即使允许,您也可能不能在不重写标准库实现的其他块的情况下"使其像 gnustl 版本"。

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