【发布时间】:2017-07-20 22:02:21
【问题描述】:
我想实现一个模板函数,它在编译时为整数类型生成位掩码。这些掩码应基于 8 位模式,其中模式将连续重复以填充整数。以下示例完全符合我的要求,但在运行时:
#include <iostream>
#include <type_traits>
#include <cstring>
template<typename Int>
typename std::enable_if<std::is_integral<Int>::value, Int>::type
make_mask(unsigned char pattern) {
Int output {};
std::memset(&output, pattern, sizeof(Int));
return output;
}
int main() {
auto mask = make_mask<unsigned long>(0xf0);
std::cout << "Bitmask: '" << std::hex << mask << "'" << std::endl;
}
上面代码的输出是:
Bitmask: 'f0f0f0f0f0f0f0f0'
我知道优化器可以消除上面代码中的整个函数调用,但我正在寻找带有c++14 和可选c++11 的constexpr 解决方案。
【问题讨论】:
标签: c++14 c++11 c++ c++11 bit-manipulation c++14 constexpr