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

时间:2013-09-17 00:37:46

标签: c++ c++11 c++-standard-library

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

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

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

据我所知,标准中没有std::bitset的静态constexpr成员可以提取大小。我错过了什么吗?如果没有,我可以做些什么来在编译时提取大小?

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:5)

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

template<class>
struct bitset_traits;

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