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

标签 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 成员可以让我提取大小。我错过了什么吗?如果不是,我该怎么做才能在编译时提取大小?

最佳答案

尝试:

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");

关于c++ - 获取没有实例的 std::bitset 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18839528/

相关文章:

c++ - C++ 中的 std::map<key, data> 是否支持结构等 native 数据类型?

c++ - 这些 MySQL 类如何链接?

c++ - Windows 7(或更高版本)中事件可见 HWND 的数量是否会显着影响性能?

c++ - 错误: ‘void*’ is not a pointer-to-object type

c++ - OpenCL:在 CPU 而不是 GPU 上的正确结果:如何正确管理内存?

c++ - 从 n3290 指向 :alignment

C++11 - 无法使用 constexpr 函数定义 constexpr 文字?

c++ - 候选模板被忽略 : couldn't infer template argument

c++ - 为什么 std::count 和 std::find 没有优化为使用 memchr?

c++ - 从 ‘std::exponential_distribution<double> (*)(double)’ 到 ‘std::exponential_distribution<double>*' 的参数没有已知的转换