您不应该仅仅为了添加新功能而复制库。不仅如此,这个新函数非常不直观,甚至可能只是阅读代码的错误来源,更不用说编写代码了。
前:
bv[n] = -1; // I know a Boolean conversion on -1 will take place
assert(bv[n]); // of course, since -1 as a Boolean is true
后:
bv[n] = -1; // I guess an integer < 1 means false?
assert(bv[n]); // Who changed my bitvector semantics?!
只需将其写出来,以便在您的域中有意义:
bv[n] = (i < 1);
请记住:最简单并不总是意味着最少的字符,而是意味着最清晰易读。
如果你确实想扩展现有类型的功能,你应该使用自由函数:
template <typename BitSet, typename Integer>
auto assign_bit_integer(BitSet& bits, const std::size_t bit, const Integer integer) ->
typename std::enable_if<std::is_integral<Integer>::value,
typename BitSet::reference>::type
{
return bits[bit] = (integer < 1);
}
给予:
std::bitset<8> bits;
assign_bit_integer(bits, 0, 5);
// ERROR: assign_bit_integer(bits, 0, 5.5);
但是对于这样一个没有明确“明显”名称的小函数来简洁地描述它的作用(assign_bit_true_if_less_than_one_otherwise_false
至少可以说是冗长的),只需写出代码即可;无论如何,它说的是同样的事情。