Bitswap函数使用模板元编程

Vin*_*ent 5 c++ recursion bit template-meta-programming c++14

位摆弄黑客网站提出以下建议非常有效的功能,以扭转位:

// Bitswap: reverse the bits of the value of unsigned integral type T
template <class T>
constexpr T bitswap(T src)
{
    constexpr std::size_t char_bit = std::numeric_limits<unsigned char>::digits;
    constexpr std::size_t digits = sizeof(T) * char_bit;
    std::size_t size = digits;
    T mask = ~T();        
    while ((size >>= 1) > 0) {
        mask ^= (mask << size);
        src = ((src >> size) & mask) | ((src << size) & ~mask);
    }
    return src;
}
Run Code Online (Sandbox Code Playgroud)
  • 有没有办法通过使用模板元编程递归来展开循环来加速这个功能?
  • 有没有办法让它适用于扩展类型,如__uint128_t?(原始版本适用__uint128_t)
  • 如果digits正确初始化为正确的位数,这个函数理论上是否可以使用两个位的非幂来反转类型的位?(例如一个低温的uint41_t).