Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | experimental‎ | simd
 
 
 
 
 
Definiert in Header <experimental/simd>
template< class V, class T, class Abi >
/*siehe unten*/ simd_cast( const simd<T, Abi>& v ) noexcept;
(1) (Parallelismus TS v2)
template< class V, class T, class Abi >
/*siehe unten*/ static_simd_cast( const simd<T, Abi>& v ) noexcept;
(2) (Parallelismus TS v2)

Ein simd-Objekt in ein anderes simd-Objekt umwandeln. Wenn V gleich T ist, wird simd<T, Abi> zurückgegeben; andernfalls, wenn V ein skalarer Typ ist, wird simd<V, simd_abi::fixed_size<simd<T, Abi>::size()>> zurückgegeben. 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().

Inhalt

[bearbeiten] Parameter

v - das Eingabe-simd-Objekt

[bearbeiten] Rückgabewert

Ein simd-Objekt, dessen i-tes Element auf static_cast<To>(v[i]) initialisiert ist, wobei To der angegebene Ausgabeelementtyp ist.

[bearbeiten] Hinweise

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

namespace stdx = std::experimental;

Abkürzung verwenden, könnten Sie stattdessen

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

verwenden wollen. Alternativ implementiert libstdc++ eine Memberfunktion __cvt() in simd_mask, die eine implizite Konvertierung der Maske ermöglicht. Siehe auch: https://github.com/VcDevel/std-simd/issues/41

[bearbeiten] Beispiel