C++ 获取没有实例的std::位集的大小

C++ 获取没有实例的std::位集的大小,c++,c++11,c++-standard-library,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 typedef std::位集权限\u位; 静态断言(权限位::size()==37,“大小必须为37”);//无效 上面这句话有点做作,但说明了一个普

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

typedef std::bitset<37> permission_bits;
static_assert(permission_bits::size() == 37, "size must be 37");  // not valid
typedef std::位集权限\u位;
静态断言(权限位::size()==37,“大小必须为37”);//无效
上面这句话有点做作,但说明了一个普遍的问题

据我在标准中看到的,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 > {};
templatestruct bitset\u size;
模板结构位集\u size>
:std::积分常数{};

static_断言(bitset_size::value==37,“大小必须为37”);

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

template<class>
struct bitset_traits;

template<size_t N>
struct bitset_traits< std::bitset<N> > {
    static const size_t size = N;
};
模板
结构位集;
模板
结构位集特征{
静态常数size\u t size=N;
};
template<class>
struct bitset_traits;

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