获取没有实例的 std::bitset 的大小

Get size of std::bitset without instance

本文关键字:bitset std 实例 获取      更新时间:2023-10-16

给定某个大小的std::bitset的typedef,我需要能够在编译时确定该大小。 例如:

typedef std::bitset<37> permission_bits;
static_assert(permission_bits::size() == 37, "size must be 37");  // not valid

以上有点做作,但显示了一般问题。

据我在标准中看到,std::bitset没有静态的constexpr成员可以让我提取大小。 我错过了什么吗? 如果没有,我可以怎么做才能在编译时提取大小?

尝试:

template< typename > struct bitset_size;
template< std::size_t N > struct bitset_size< std::bitset< N > >
  : std::integral_constant< std::size_t, N > {};

static_assert( bitset_size<permission_bits>::value == 37, "size must be 37");

您可以使用模板元编程来制作一个:

template<class>
struct bitset_traits;
template<size_t N>
struct bitset_traits< std::bitset<N> > {
    static const size_t size = N;
};