通过编译时值推断整数的类型

Mih*_*los 5 c++ c++20

使用 C++14、17 或 20,我将两个模板参数传递给模板化类:TSize 和 MaxSize。

TSize 是 MaxSize 的类型。显然,两者在编译时都是已知的。TSize 需要足够大以适合 MaxSize。

template <typename TSize = uint8_t, TSize MaxSize = 15>
class Foo {};
Run Code Online (Sandbox Code Playgroud)

如何根据MaxSize的值自动推导出TSSize,所以我只要设置MaxSize的值就自动得到了?IE:

if MaxSize<256 -> TSize=uint8_t
if MaxSize<65536 && MaxSize>255 -> TSize=uint16_t
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

Nel*_*eal 4

你可以使用这样的东西:

template<uintmax_t n>
using FittingUIntT = std::conditional_t<
    n <= UINT8_MAX, uint8_t, std::conditional_t<
    n <= UINT16_MAX, uint16_t, std::conditional_t<
    n <= UINT32_MAX, uint32_t, uint64_t
>>>;
Run Code Online (Sandbox Code Playgroud)

演示