如果我有编译时间常数,num_bits如何获得可以容纳这么多位的最小整数类型?
我当然可以这样做:
#include <cstdint>
#include <type_traits>
std::size_t constexpr num_bits = 19;
using T =
std::conditional_t<num_bits <= 8, uint8_t,
std::conditional_t<num_bits <= 16, uint16_t,
std::conditional_t<num_bits <= 32, uint32_t,
std::conditional_t<num_bits <= 64, uint64_t,
void>>>>;
Run Code Online (Sandbox Code Playgroud)
但也许标准库中存在一些现成的元函数来实现这个目标?
我创建这个问题只是为了专门从标准库中找出单个元函数。但是,如果除了我提出的上述解决方案之外,您还有其他好的建议如何解决此任务,那么也请发布此类解决方案......
更新。正如评论中所建议的,uint_leastX_t应该使用而不是uintX_t在上面的代码中的任何地方使用,因为uintX_t在某些平台上可能不存在,但uint_leastX_t始终存在。
目前 C++ 标准库中没有为此提供的模板类型。
标准库确实有一些与您正在寻找的相反std::numeric_limits<T>::max的功能( )。
在 p0102 中建议将此类功能添加到 c++ 标准库:“ C++ Parametric Number Type Aliases ”。在lists.isocpp.org/std-proposals 上也有人提出了与您类似的问题,其中提到了p0102。
如果您对使用Boost感兴趣/同意,Boost 有boost::int_max_value_t<V>,它是一个定义类型成员least(最小)和fast(“最容易操作”)的结构。
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |