4

あるサイズの typedef が与えられた場合std::bitset、コンパイル時にそのサイズを決定できる必要があります。例えば:

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

上記は少し不自然ですが、一般的な問題を示しています。

標準で確認できる限りstd::bitset、サイズを抽出できる static constexpr メンバーはありません。私は何かを逃しましたか?そうでない場合、コンパイル時にサイズを抽出するにはどうすればよいですか?

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 に答える