将字节大小转换为无符号整数类型
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{};
}
}());
我正在开发一个需要自动推断大小类型(以字节为单位)的库。
如何将大小(以字节为单位)转换为无符号整数类型?
推导的类型必须足够大以存储数据大小,但这并不意味着在所有情况下都使用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{};
}
}());