在Bit Twiddling Hacks网站上,提供了以下算法来将整数舍入到下一个二的幂:
我希望编写一个元编程函数,能够进行以下操作:
怎么做呢?
例如:对于
unsigned int v; // compute the next highest power of 2 of 32-bit v
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
我希望编写一个元编程函数,能够进行以下操作:
- 递归地执行(用于编译时执行)
- 适用于任意类型的整数(它甚至可以处理任意大小的非标准整数,例如15位、65位等)
template <typename Type,
// Something here (like a recursion index)
class = typename std::enable_if<std::is_integral<Type>::value>::type,
class = typename std::enable_if<std::is_unsigned<Type>::value>::type>
constexpr Type function(const Type value)
{
// Something here
}
怎么做呢?
例如:对于
value = 42
,应该返回 64
。