如果你想遵守
std::bitset
operator[]
改进我自己的评论,MarekR建议定义
extract_word
template <std::size_t IW, std::size_t N>
constexpr unsigned long extract_word (std::bitset<N> const& bs)
{
using limits = std::numeric_limits<unsigned long>;
static_assert(N % limits::digits == 0);
static_assert(IW < N / limits::digits);
return [&bs] <std::size_t...Is> (std::index_sequence<Is...>) {
return ( (std::size_t{bs[Is + IW * limits::digits]}<<Is) | ...);
} (std::make_index_sequence<limits::digits>());
}
在这里,我们扩展了一个
std::index_sequence
然后使用折叠表达式来计算给定索引处的单词。以下
demo
似乎导致了一个相当简洁的汇编代码。