Namespaces
Variants

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

From cppreference.net
Definiert im Header <experimental/simd>
template < class V, class T, class Abi >
/*siehe unten*/ simd_cast ( const simd < T, Abi > & v ) noexcept ;
(1) (Parallelism TS v2)
template < class V, class T, class Abi >
/*siehe unten*/ static_simd_cast ( const simd < T, Abi > & v ) noexcept ;
(2) (Parallelism TS v2)

Wandelt ein simd-Objekt in ein anderes simd-Objekt um. Wenn V T ist, gibt simd < T, Abi > zurück; andernfalls, wenn V ein Skalartyp ist, gibt simd < V, simd_abi :: fixed_size < simd < T, Abi > :: size ( ) >> zurück. Andernfalls muss V ein simd-Typ sein, und die Funktion gibt V zurück.

1) Diese Funktion nimmt nicht an der Überladungsauflösung teil, es sei denn
  • jeder mögliche Wert des Eingabeelements kann mit dem Ausgabeelement dargestellt werden,
  • entweder is_simd_v < V > ist falsch, oder V :: size ( ) ist simd < T, Abi > :: size ( ) .
2) Diese Funktion nimmt nicht an der Überladungsauflösung teil, es sei denn, entweder is_simd_v < V > ist falsch, oder V :: size ( ) ist simd < T, Abi > :: size ( ) .

Inhaltsverzeichnis

Parameter

v - das Eingabe-SIMD-Objekt

Rückgabewert

Ein SIMD-Objekt, bei dem das i-te Element initialisiert wird mit static_cast < To > ( v [ i ] ) , wobei To der spezifizierte Ausgabeelementtyp ist.

Hinweise

Die TS-Spezifikation fehlt simd_cast und static_simd_cast Überladungen für simd_mask . Die libstdc++-Implementierung stellt die fehlenden Überladungen im std :: experimental :: __proposed Namespace bereit. Wenn Sie bereits den

namespace stdx = std::experimental;

Shortcut, könnten Sie interessiert sein zu verwenden

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

stattdessen. Alternativ implementiert libstdc++ eine __cvt ( ) Member-Funktion in simd_mask , die implizite Konvertierung der Maske erlaubt. Siehe auch: https://github.com/VcDevel/std-simd/issues/41

Beispiel