Namespaces
Variants

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

From cppreference.net
Défini dans l'en-tête <experimental/simd>
template < class V, class T, class Abi >
/*voir ci-dessous*/ simd_cast ( const simd < T, Abi > & v ) noexcept ;
(1) (parallelism TS v2)
template < class V, class T, class Abi >
/*voir ci-dessous*/ static_simd_cast ( const simd < T, Abi > & v ) noexcept ;
(2) (parallelism TS v2)

Convertit un objet simd en un autre objet simd. Si V est T, retourne simd < T, Abi > ; sinon, si V est un type scalaire, retourne simd < V, simd_abi :: fixed_size < simd < T, Abi > :: size ( ) >> . Sinon, V doit être un type simd, et la fonction retourne V.

1) Cette fonction ne participe pas à la résolution de surcharge sauf si
  • chaque valeur possible de l'élément d'entrée peut être représentée avec l'élément de sortie,
  • soit is_simd_v < V > est faux, soit V :: size ( ) est égal à simd < T, Abi > :: size ( ) .
2) Cette fonction ne participe pas à la résolution de surcharge sauf si is_simd_v < V > est faux, ou si V :: size ( ) est égal à simd < T, Abi > :: size ( ) .

Table des matières

Paramètres

v - l'objet simd d'entrée

Valeur de retour

Un objet simd dont le i-ème élément est initialisé à static_cast < To > ( v [ i ] ) , où To est le type d'élément de sortie comme spécifié.

Notes

La spécification TS manque simd_cast et static_simd_cast les surcharges pour simd_mask . L'implémentation libstdc++ fournit les surcharges manquantes dans l'espace de noms std :: experimental :: __proposed . Si vous utilisez déjà

namespace stdx = std::experimental;

raccourci, vous pourriez être intéressé à utiliser

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

à la place. Alternativement, libstdc++ implémente une __cvt ( ) fonction membre dans simd_mask , qui permet la conversion implicite du masque. Voir aussi : https://github.com/VcDevel/std-simd/issues/41

Exemple