返回类型的模板

我的目标是确定在编译时传递给模板类的类型。

这是一些伪代码:

// Definition
template<size_t BitCount>
get_type<BitCount> {
    if (BitCount <= 8)  return uint8_t;
    if (BitCount <= 16) return uint16_t;
    if (BitCount <= 32) return uint32_t;
    if (BitCount <= 64) return uint64_t;
}

template<typename T>
class C {
...
};

// Usage
const size_t bit_count = 7;
C c = C<get_type<bit_count>>();

我认为应该可以这样做,因为bit_count在编译时就知道了,但是我很难找到这个习语的例子。

回答

#include <type_traits>
#include <cstdint>

template <auto bitCount>
using UInteger = 
  std::conditional_t<bitCount <= 8, std::uint8_t,
    std::conditional_t<bitCount <= 16, std::uint16_t,
      std::conditional_t<bitCount <= 32, std::uint32_t, 
        std::conditional_t<bitCount <= 64, std::uint64_t,
          void>>>>;


以上是返回类型的模板的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>