std::experimental:: disjunction
|
헤더 파일에 정의됨
<experimental/type_traits>
|
||
|
template
<
class
...
B
>
struct disjunction ; |
(라이브러리 fundamentals TS v2) | |
타입 특성
B...
의
논리적 선언
을 구성하며, 특성 시퀀스에 논리적 OR 연산을 효과적으로 수행합니다.
특수화 std :: experimental :: disjunction < B1, ..., BN > 는 공개적이고 명확한 베이스를 가집니다.
- 만약 sizeof... ( B ) == 0 이면, std:: false_type ; 그렇지 않으면
-
B1, ..., BN중에서 bool ( Bi :: value ) == true 인 첫 번째 타입Bi, 또는 그러한 타입이 없으면BN.
기본 클래스의 멤버 이름 중
disjunction
과
operator=
를 제외한 나머지는 숨겨지지 않으며
disjunction
에서 명확하게 사용 가능합니다.
디스정션(disjunction)은 단락 평가(short-circuiting)를 수행합니다: 만약
Bi
와 같은 템플릿 타입 인자 중
bool
(
Bi
::
value
)
!
=
false
를 만족하는 인자가 존재한다면,
disjunction
<
B1, ..., BN
>
::
value
의 인스턴스화는
j > i
인
Bj
::
value
의 인스턴스화를 요구하지 않습니다.
목차 |
템플릿 매개변수
| B... | - |
모든 템플릿 인수
Bi
에 대해
Bi
::
value
가 인스턴스화되는 경우, 해당 인수는 기본 클래스로 사용 가능해야 하며
bool
로 변환 가능한 멤버
value
를 정의해야 함
|
헬퍼 변수 템플릿
|
template
<
class
...
B
>
constexpr bool disjunction_v = disjunction < B... > :: value ; |
(라이브러리 fundamentals TS v2) | |
가능한 구현
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...>> {}; |
참고 사항
disjunction
의 특수화는 반드시
std::
true_type
또는
std::
false_type
중 하나로부터 상속받는 것은 아닙니다: 단순히
bool
로 명시적으로 변환된
::value
가 true인 첫 번째
B
로부터 상속받거나, 모두 false로 변환될 경우 마지막
B
로부터 상속받습니다. 예를 들어,
disjunction
<
std::
integral_constant
<
int
,
2
>
,
std::
integral_constant
<
int
,
4
>>
::
value
는
2
입니다.
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
(C++17)
|
가변 논리 OR 메타함수
(클래스 템플릿) |