std::experimental::simd_cast, std::experimental::static_simd_cast
| 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.
- 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().
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
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |