检测没有预处理器或stdint.h的64位整数类型

时间:2012-09-28 13:18:05

标签: c++ c++11

不使用#ifstdint.hinttypes.h或特定于编译器的扩展(非标准内部类型除外),而是免费使用所有其他C ++功能(包括C ++)例如11 type_traits是否可以编写具有

效果的代码
typedef {some implementation-specific type} int_least64;

当且仅当有特定于实现的类型提供至少64位精度,否则会产生编译时错误?

构造应检测可能具有所需属性的非标准内在类型(例如,MSVC ++上的__int64)以及标准属性(longlong long)。如果有几种类型符合要求,则应选择符合条件的最小类型。理想情况下,可以推广使用enable_if以及错误输出,并检测任意大整数(例如,某些编译器现在提供__int128)。

2 个答案:

答案 0 :(得分:2)

不,你不能。程序没有设施来反省实现中可用的类型,并且给定一个不合格的名称,没有办法在程序中使用它,即使程序仍然是格式良好的,即使名称不是表示一种类型。

这是将cstdint添加到C ++以及C99兼容性的动机的一部分。

答案 1 :(得分:0)

如果问题是MSVC和<cstdint>,请至少升级到MSVS2010或自己为Windows编写。这并不难。

您可以使用一些模板技巧,但它仍然需要long long起来(以及)64位整数。

我是从SO C ++休息室的一个人那里得到的(即@StackedCrooked):

https://github.com/rubenvb/KISS/blob/master/include/types.hxx#L47