新しい関数を追加するためだけにライブラリをコピーするべきではありません。それだけでなく、新しい関数は非常に直感的ではなく、コードを書くどころか、コードを読むだけでもエラーの原因になる可能性があります。
前:
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
控えめに言っても冗長です)、コードを書き出すだけです。とにかく同じことを言います。