Dav*_*one 4 c++ templates integer c++11
我一直在我的代码中使用cstdint中的类型(例如uint32_t),但现在它们并不完全符合我的需求,特别是在模板方面.
有没有办法指定一个两倍于模板参数大小的整数类型?当我的模板传递给uint32_t时,我需要它为函数中的一个变量创建一个uint64_t.也许更难的是,当通过uint64_t时,我需要它来创建一个'uint128_t'.我可以使用两个模板参数的数组来完成此操作,但是我无法将该数组传递给其他模板函数.这是一个性能关键的代码部分(我正在进行密码学).
与此相关,是否有一些其他标头我可以包括(按优先顺序:标准,升压,其他)给我128位整数?看起来这个问题回答了这个特殊的部分:最快的128位整数库
有没有办法指定我想使用不大于特定大小的最大可用整数?该最大尺寸也是sizeof(T)的函数.
"扩展算术"是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; };
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
271 次 |
最近记录: |