Namespaces
Variants

std::experimental:: disjunction

From cppreference.net
Definiert in Header <experimental/type_traits>
template < class ... B >
struct disjunction ;
(Library Fundamentals TS v2)

Bildet die logische Disjunktion der Typmerkmale B... , was effektiv ein logisches Oder auf der Folge von Merkmalen ausführt.

Die Spezialisierung std :: experimental :: disjunction < B1, ..., BN > hat eine öffentliche und eindeutige Basis, die

  • wenn sizeof... ( B ) == 0 , std:: false_type ; andernfalls
  • der erste Typ Bi in B1, ..., BN für den bool ( Bi :: value ) == true , oder BN falls kein solcher Typ existiert.

Die Member-Namen der Basisklasse, außer disjunction und operator= , werden nicht verborgen und sind in disjunction eindeutig verfügbar.

Disjunktion ist kurzschließend: wenn es ein Template-Typenargument Bi gibt mit bool ( Bi :: value ) ! = false , dann erfordert die Instanziierung von disjunction < B1, ..., BN > :: value nicht die Instanziierung von Bj :: value für j > i .

Inhaltsverzeichnis

Template-Parameter

B... - jedes Template-Argument Bi für das Bi :: value instanziiert wird, muss als Basisklasse verwendbar sein und Member value definieren, der in bool konvertierbar ist

Hilfsvariablen-Template

template < class ... B >
constexpr bool disjunction_v = disjunction < B... > :: value ;
(Library Fundamentals TS v2)

Mögliche Implementierung

template<class...> struct disjunction : std::false_type {};
template<class B1> struct disjunction<B1> : B1 {};
template<class B1, class... Bn>
struct disjunction<B1, Bn...> 
    : std::conditional_t<bool(B1::value), B1, disjunction<Bn...>>  {};

Hinweise

Eine Spezialisierung von disjunction erbt nicht notwendigerweise von std:: true_type oder std:: false_type : Sie erbt einfach vom ersten B , dessen ::value , explizit zu bool konvertiert, true ist, oder vom letzten B, wenn alle zu false konvertieren. Zum Beispiel ist disjunction < std:: integral_constant < int , 2 > , std:: integral_constant < int , 4 >> :: value gleich 2 .

Beispiel

Siehe auch

variadische logische ODER-Metafunktion
(Klassentemplate)