ein*_*ica 5 c++ templates idiomatic generic-programming
假设我有一个整数类型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;
Run Code Online (Sandbox Code Playgroud)
如果我们希望某些东西适用于任何整数类型:
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;
Run Code Online (Sandbox Code Playgroud)
有关和的详细信息,请参阅Boost.Integer 的文档。int_t<N>
uint_t<N>
归档时间: |
|
查看次数: |
379 次 |
最近记录: |