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, true
parece ser igual a 0x01
.
Então, existe uma maneira legal de comparar um pouco com um booleano?
(flags & AMAZING_FLAG) && doSet
:?