如果我有编译时常量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
总是存在。
2条答案
按热度按时间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
(“最容易操作”)的结构体。exdqitrt2#
不,没有现成的 meta函数用于此