Digamos que eu tenha um conjunto de sinalizadores, codificado em uint16_t flags. Por exemplo AMAZING_FLAG = 0x02,. Agora, eu tenho uma função. Essa função precisa verificar se eu quero alterar o sinalizador, porque se eu quiser fazer isso, preciso escrever para piscar. E isso é caro. Portanto, quero uma verificação que me diga se flags & AMAZING_FLAGé igual a doSet. Esta é a primeira ideia:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Esta não é uma declaração intuitiva. Eu sinto que deveria haver uma maneira melhor, algo como:
if ((flags & AMAZING_FLAG) != doSet){
}
Mas isso realmente não funciona, trueparece ser igual a 0x01.
Então, existe uma maneira legal de comparar um pouco com um booleano?
(flags & AMAZING_FLAG) && doSet:?