4

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

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

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

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

4

2 回答 2

8

尝试:

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");
于 2013-09-17T00:43:12.277 回答
5

您可以使用模板元编程进行组合:

template<class>
struct bitset_traits;

template<size_t N>
struct bitset_traits< std::bitset<N> > {
    static const size_t size = N;
};
于 2013-09-17T00:44:22.617 回答