在C++中获取能容纳给定位数的最小整数类型

vawmfj5a  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(124)

如果我有编译时常量num_bits,我怎样才能得到能容纳这么多位的最小整型呢?
我当然能做到:
Try it online!

#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>>>>;

但是,也许标准库中存在一些现成的 meta函数来实现这个目标?
我提出这个问题只是为了从标准库中找到一个 meta函数。但是如果你有其他好的建议如何解决这个问题,除了我提出的解决方案,那么请张贴这样的解决方案了...

更新。正如注解中所建议的,在我上面的代码中,应该使用uint_leastX_t而不是uintX_t,因为uintX_t可能在某些平台上不存在,而uint_leastX_t总是存在。

dw1jzc5e

dw1jzc5e1#

目前在c标准库中没有此的模板类型。
标准库 * 确实 * 有一些东西可以做你正在寻找的东西(std::numeric_limits<T>::max)的 * 逆 *。
有人提议在p0102: "C++ Parametric Number Type Aliases"的c
标准库中添加这样的功能,有人问过on lists.isocpp.org/std-proposals类似的问题,其中提到了p0102。
如果您对使用Boost感兴趣,Boost有boost::int_max_value_t<V>,这是一个定义类型成员least(最小)和fast(“最容易操作”)的结构体。

exdqitrt

exdqitrt2#

不,没有现成的 meta函数用于此

相关问题