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

时间:2019-07-15 10:50:14

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

在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?

1 个答案:

答案 0 :(得分:5)

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

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

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

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