我经常在代码中使用cstdint中的类型(比如uint32_t),但现在它们不太符合我的需要,特别是在模板方面。
有没有办法指定一个两倍于模板参数大小的整数类型?当向我的模板传递uint32_t时,我需要它为函数中的一个变量创建一个uint64_t。也许更困难的是,当传递一个uint64_t时,我需要它来创建一个'uint128_t‘。我可以使用一个包含两个模板参数的数组来实现这一点,但是我不能将该数组传递给其他模板函数。这是代码的一个性能关键部分(我正在做密码学)。
与此相关的是,有没有其他可以包含的头文件(按偏好顺序: standard、boost、other),可以提供128位整数?看起来这个问题回答了这个特殊的部分:Fastest 128 bit integer library
有没有办法指定我想要使用不大于特定大小的最大整数?此最大大小也是sizeof (T)的函数。
发布于 2011-12-01 02:31:57
“扩展算术”是C语言家族的一个缺点。没有办法获得处理器的整数溢出标志,因此没有可移植的方法来编写最优的128位整数类。
为了获得最佳性能(与其他加密库竞争),您可能需要一个内部带有自定义程序集的静态库。不幸的是,我不知道这样一个可移植的(广泛移植的)接口。
如果你只想要一个从N位的基本类型到2N位的基本类型的映射,那么做一个简单的元函数:
template< typename half >
struct double_bits;
template<>
struct double_bits< std::uint8_t >
{ typedef std::uint16_t type; };
template<>
struct double_bits< std::uint16_t >
{ typedef std::uint32_t type; };
template<>
struct double_bits< std::uint32_t >
{ typedef std::uint64_t type; };https://stackoverflow.com/questions/8330865
复制相似问题