我想在编译时生成各种位掩码:
0x11111111
或 0x1111111111111111
0xF0F0F0F0
或 0xF0F0F0F0F0F0F0F0
大小将取决于类型,可以是32位或64位。
例如:
template <typename T> genMask(unsigned char templt) {
....
};
genMask<uint32_t>(0xF0);
genMask<uint64_t>(0xF0);
第一次调用应该生成0xF0F0F0F0
,而对genMask的第二次调用应该生成0xF0F0F0F0F0F0F0F0
目前我已经将它们硬编码。
在这里任何想法都会受到极大的赞赏。
编辑:以下是一种老派的实现方式:
#define MASK(b) ((T(-1) / 0xFF) * (b))
其中T是类型。
std::numeric_limits<T>::max() / 0xFF * 0x11
和std::numeric_limits<T>::max() / 0xFF * 0xF0
。 - Eric Postpischil