将字节大小转换为无符号整数类型

Convert size in bytes to unsigned integral type

我正在开发一个需要自动推断大小类型(以字节为单位)的库。

如何将大小(以字节为单位)转换为无符号整数类型?

推导的类型必须足够大以存储数据大小,但这并不意味着在所有情况下都使用uint64_t

C++20以下均可使用

为了更清楚,我想推导一个类型来存储大小的数据,但不会浪费内存。

例如:

magic<1> -> uint8_t
magic<2> -> uint16_t
magic<3> -> uint32_t
magic<7> -> uint64_t

立即调用 lambda 可能会有所帮助。您也可以使用 std::conditional_t.

template<std::size_t N>
using magic = decltype([] {
  if constexpr (N <= 1)
    return std::uint8_t{};
  else if constexpr (N <= 2)
    return std::uint16_t{};
  else if constexpr (N <= 4)
    return std::uint32_t{};
  else {  
    static_assert(N <= 8);
    return std::uint64_t{};
  }
}());