Normalerweise verwende ich enum
mit dem 'bit-or' oder |
zusammen, um einem Objekt einige Optionen zu geben. Wie man enum-Klasse macht, um mit der 'Bit-oder' Funktion zu arbeiten?
Sie müssen die Operatoren für Ihre enum-Klasse überladen und sie implementieren, indem Sie auf den zugrunde liegenden Typ umwandeln:
%Vor% ... das könnte natürlich verallgemeinert werden (mit SFINAE und std::underlying_type
). Dass C ++ dies nicht out-of-the-box bietet, ist meiner Meinung nach ein Versehen.
So könnte eine allgemeine Implementierung aussehen:
%Vor% Diese Implementierung stellt sicher, dass die Überladung nur für Enums gefunden wird, die tatsächlich als Flags fungieren. Um ein Enum als Flag zu markieren, müssen Sie is_flag
:
Tags und Links c++ enum-class