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

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

template <typename TSize = uint8_t, TSize MaxSize = 15>
class Foo {};

如何通过MaxSize的值自动推断TSize,因此仅通过设置MaxSize的值即可自动获得TSize? IE。:
if MaxSize<256 -> TSize=uint8_t
if MaxSize<65536 && MaxSize>255 -> TSize=uint16_t

非常感谢您的帮助!

最佳答案

您可以使用如下所示的内容:

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
>>>;

Demo

关于c++ - 通过其编译时间值推导整数的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61841624/

10-09 00:19