Wie macht man enum-Klasse, um mit der "Bit-oder" -Funktion zu arbeiten?

8

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?

    
user1899020 14.09.2013, 16:35
quelle

1 Antwort

15

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 :

spezialisieren %Vor%     
Konrad Rudolph 14.09.2013, 16:39
quelle

Tags und Links