std::experimental:: where_expression
|
Definiert in Header
<experimental/simd>
|
||
|
template
<
class
M,
class
V
>
class where_expression ; |
(Parallelism TS v2) | |
Die Klassenvorlage
where_expression
abstrahiert das Konzept ausgewählter Elemente
eines gegebenen L-Werts arithmetischen oder datenparallelen Typs. Ausgewählte Elemente sind die Elemente des L-Werts (vom Typ
V
), für die das entsprechende Element der Maske (vom Typ
M
) wahr ist. Operatoren, die auf Objekte vom Typ
where_expression<M, V>
angewendet werden, werden nur auf ausgewählte Elemente angewendet. Alle anderen Elemente bleiben unverändert.
Verwenden Sie die
where
Funktion, um
where_expression
Objekte zu konstruieren.
Template-Parameter
| M | - | Der Maskentyp |
| V | - | Der Werttyp, auf den M angewendet wird |
Gültige Kombinationen von
(
M
,
V
)
sind:
-
(simd_mask < T, Abi >,simd < T, Abi >), -
(simd_mask < T, Abi >,simd_mask < T, Abi >), -
(bool,T).
Memberfunktionen
|
weist ausgewählten Positionen zu
(öffentliche Elementfunktion) |
|
|
zusammengesetzte Operatoren
(öffentliche Elementfunktion) |
|
|
Inkrement- und Dekrementoperatoren
(öffentliche Elementfunktion) |
|
|
lädt von Adresse in ausgewählte Positionen
(öffentliche Elementfunktion) |
Beispiel
#include <cstddef> #include <experimental/simd> #include <iostream> namespace stdx = std::experimental; void print(auto const& a) { for (std::size_t i{}; i != std::size(a); ++i) std::cout << a[i] << ' '; std::cout << '\n'; } template<class A> stdx::simd<int, A> my_abs(stdx::simd<int, A> x) { where(x < 0, x) = -x; return x; } int main() { const stdx::native_simd<int> a([](int i) { return i - 2; }); print(a); const auto b = my_abs(a); print(b); }
Mögliche Ausgabe:
-2 -1 0 1 2 1 0 1