-2

不使用#if, stdint.h,inttypes.h或特定于编译器的扩展(非标准内部类型除外),但可以自由使用所有其他 C++ 功能(例如包括 C++11 type_traits),是否可以编写具有以下效果的代码

typedef {some implementation-specific type} int_least64;

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

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

4

2 回答 2

2

不,你不能。程序没有工具可以内省实现中可用的类型,并且给定一个不合格的名称,没有办法在程序中以这样的方式使用它,即使名称不正确,程序仍然是格式良好的。表示一个类型。

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

于 2012-09-28T15:02:39.810 回答
0

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

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

我从 SO C++ Lounge 的一个人(即@StackedCrooked)那里得到它:

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

于 2012-09-28T15:11:22.777 回答