给定某个大小的std::bitset
的typedef,我需要能够在编译时确定该大小。例如:
typedef std::bitset<37> permission_bits;
static_assert(permission_bits::size() == 37, "size must be 37"); // not valid
以上是有点做作,但显示了一般问题。
据我所知,标准中没有std::bitset
的静态constexpr成员可以提取大小。我错过了什么吗?如果没有,我可以做些什么来在编译时提取大小?
答案 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;
};