Napiszę dzisiaj o nierzadko zapominanej klasie z biblioteki standardowej C++, czyli o tytułowym zbiorze bitów – std::bitset
. Działania na pojedynczych bitach nie są raczej czymś, co wykonujemy codziennie, ale zdarzają się sytuacje, gdy stanowią one najrozsądniejsze rozwiązanie w danej chwili. Takim typowym przypadkiem jest zbiór flag logicznych: kilku opcji działających jak przełączniki, których możliwą wartością jest tylko true
albo false
. Wszelkie API doskonale zna takie konstrukcje, czego przykładem może być metoda Clear
urządzenia DirectX:
D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER
jest właśnie kombinacją flag bitowych, a dwie występujące tu stałe zostały odpowiednio zdefiniowane, by dało się je łączyć operatorem sumy bitowej |
.
Używając std::bitset
możemy nieco uprościć obsługę takich opcji. Zamiast deklarowania specjalnych wartości, możemy użyć zwykłego enum
a, np.:
bitset
jest wtedy łatwy w użyciu:
Zachowana jest przy tym “kompatybilność wsteczna” w stosunku do ręcznie definiowanych stałych, jeśli chcielibyśmy z nich korzystać:
Na koniec wspomnę tylko, że aby korzystać z klasy bitset
do tych lub innych zastosowań, należy wpierw dołączyć standardowy nagłówek o nazwie… bitset :)