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



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

typedef {some implementation-specific type} int_least64;

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

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

不,你不能。 程序没有工具来内省实现中可用的类型,并且给定一个非限定名称,因此无法在程序中使用它,即使名称不表示类型,程序仍保持良好的格式。

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

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

您可以使用一些模板技巧,但它仍然需要long long才能获得(及超过)64 位整数。

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

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

最新更新