Namespaces
Variants

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

From cppreference.net
Definido en el encabezado <experimental/simd>
template < class V, class T, class Abi >
/*ver más abajo*/ simd_cast ( const simd < T, Abi > & v ) noexcept ;
(1) (parallelism TS v2)
template < class V, class T, class Abi >
/*ver más abajo*/ static_simd_cast ( const simd < T, Abi > & v ) noexcept ;
(2) (parallelism TS v2)

Convierte un objeto simd a otro objeto simd. Si V es T, retorna simd < T, Abi > ; de lo contrario, si V es un tipo escalar, retorna simd < V, simd_abi :: fixed_size < simd < T, Abi > :: size ( ) >> . De lo contrario, V debe ser un tipo simd, y la función retorna V.

1) Esta función no participa en la resolución de sobrecarga a menos que
  • cada valor posible del elemento de entrada pueda ser representado con el elemento de salida,
  • ya sea que is_simd_v < V > sea falso, o que V :: size ( ) sea simd < T, Abi > :: size ( ) .
2) Esta función no participa en la resolución de sobrecarga a menos que is_simd_v < V > sea falso, o V :: size ( ) sea igual a simd < T, Abi > :: size ( ) .

Contenidos

Parámetros

v - el objeto simd de entrada

Valor de retorno

Un objeto simd con el i-ésimo elemento inicializado a static_cast < To > ( v [ i ] ) , donde To es el tipo de elemento de salida como se especifica.

Notas

La especificación TS carece de simd_cast y static_simd_cast sobrecargas para simd_mask . La implementación de libstdc++ proporciona las sobrecargas faltantes en el espacio de nombres std :: experimental :: __proposed . Si ya utiliza

namespace stdx = std::experimental;

atajo, podría interesarte usar

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

en su lugar. Alternativamente, libstdc++ implementa una __cvt ( ) función miembro en simd_mask , que permite la conversión implícita de la máscara. Véase también: https://github.com/VcDevel/std-simd/issues/41

Ejemplo