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

0 c++ typedef std libc++ c++-chrono

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

std::chrono::duration<long long, std::micro>
Run Code Online (Sandbox Code Playgroud)

对于64位平台,long long的定义导致与int64_t的冲突,因为之前已为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>>;
Run Code Online (Sandbox Code Playgroud)

我如何达到相同的目的。Typdef和#define在具有std ::和chrono ::的同时给出语法错误,这是我们希望重新定义std :: chrono :: microseconds吗?

Lig*_*ica 5

你不能 这些类型不归您所有。那就是它们在命名空间中的含义std。这不是您的代码。

如果要定义自己的别名,请在自己的名称空间中进行定义。

除了别的什么,您的工具链可能以特定方式实现标准库可能是有原因的。即使允许,您也可能无法不重写标准库实现的其他部分而“使其像gnustl版本”。

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