Namespaces
Variants

std::experimental:: simd_cast, std::experimental:: static_simd_cast

From cppreference.net
헤더 파일에 정의됨 <experimental/simd>
template < class V, class T, class Abi >
/*see below*/ simd_cast ( const simd < T, Abi > & v ) noexcept ;
(1) (parallelism TS v2)
template < class V, class T, class Abi >
/*see below*/ static_simd_cast ( const simd < T, Abi > & v ) noexcept ;
(2) (parallelism TS v2)

simd 객체를 다른 simd 객체로 캐스팅합니다. V가 T인 경우 simd < T, Abi > 를 반환합니다; 그렇지 않고 V가 스칼라 타입인 경우 simd < V, simd_abi :: fixed_size < simd < T, Abi > :: size ( ) >> 를 반환합니다. 그 외의 경우 V는 반드시 simd 타입이어야 하며, 함수는 V를 반환합니다.

1) 이 함수는 다음 조건을 모두 만족하지 않는 한 오버로딩 해결에 참여하지 않습니다:
  • 입력 요소의 가능한 모든 값이 출력 요소로 표현될 수 있어야 하며,
  • is_simd_v < V > 가 거짓이거나, V :: size ( ) simd < T, Abi > :: size ( ) 와 동일해야 합니다.
2) 이 함수는 다음 중 하나가 참이 아닌 경우 오버로딩 해결에 참여하지 않습니다: is_simd_v < V > 가 거짓이거나, V :: size ( ) simd < T, Abi > :: size ( ) 인 경우입니다.

목차

매개변수

v - 입력 SIMD 객체

반환값

i번째 요소가 static_cast < To > ( v [ i ] ) 로 초기화된 simd 객체. 여기서 To는 지정된 출력 요소 타입입니다.

참고 사항

TS 명세에는 simd_cast static_simd_cast simd_mask 오버로드가 누락되어 있습니다. libstdc++ 구현체는 누락된 오버로드들을 std :: experimental :: __proposed 네임스페이스에서 제공합니다. 만약 이미 사용 중이시라면

namespace stdx = std::experimental;

바로 가기, 사용해 보시면 좋을 것 같습니다

namespace stdx {
  using namespace std::experimental;
  using namespace std::experimental::__proposed;
}

대신에, libstdc++는 __cvt ( ) 멤버 함수를 simd_mask 에 구현하여 마스크의 암시적 변환을 허용합니다. 참고: https://github.com/VcDevel/std-simd/issues/41

예제