我正在開發一個需要自動推斷大小型別(以位元組為單位)的庫。
如何將大小(以位元組為單位)轉換為無符號整數型別?
推導的型別必須足夠大以存盤資料的大小,但這并不意味著uint64_t
在每種情況下都使用。
可以使用 C 20 或以下版本。
為了更清楚,我想推匯出一個型別來存盤大小但不浪費記憶體的資料。
例如:
magic<1> -> uint8_t
magic<2> -> uint16_t
magic<3> -> uint32_t
magic<7> -> uint64_t
uj5u.com熱心網友回復:
立即呼叫 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{};
}
}());
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/470083.html
上一篇:在這個例子中用智能指標替換new
下一篇:如何將成員函式作為引數傳遞