gpt4 book ai didi

c++ - 如何表达 "the minimum integral type larger than T"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:21 25 4
gpt4 key购买 nike

假设我有一个整数类型 T(有符号或无符号)。我想(在编译时)引用可以容纳的最小整数类型(有符号或无符号),比如说 std::numeric_limits<T>::max()加 1(在非溢出意义上,我的意思是)。

这样做的通用方法是什么?

最佳答案

对于无符号类型,这可以解决问题:

template <typename T>
constexpr unsigned size_in_bits() { return sizeof(T) * CHAR_BIT; }

template <typename T>
using least_larger_uint_t =
typename boost::uint_t<size_in_bits<T>() + 1>::least;

如果我们希望某些东西适用于任何整数类型:

template <typename T, int NumBits>
using boost_integer_type =
typename std::conditional<
std::is_unsigned<T>::value,
boost::uint_t<NumBits>,
boost::int_t<NumBits>
>::type;

template <typename T>
constexpr unsigned size_in_bits() { return sizeof(T) * CHAR_BIT; }

template <typename T>
using least_larger_integral_t =
typename boost_integer_type<T, size_in_bits<T>() + 1>::least;

参见 documentation for Boost.Integer有关 int_t<N> 的详细信息和 uint_t<N> .

关于c++ - 如何表达 "the minimum integral type larger than T"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38612697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com