返回类型的模板
我的目标是确定在编译时传递给模板类的类型。
这是一些伪代码:
// 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>>>>;