Namespaces
Variants

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

From cppreference.net
定義済みヘッダー <experimental/simd>
template < class V, class T, class Abi >
/*see below*/ simd_cast ( const simd < T, Abi > & v ) noexcept ;
(1) (parallelism TS v2)
template < class V, class T, class Abi >
/*see below*/ static_simd_cast ( const simd < T, Abi > & v ) noexcept ;
(2) (parallelism TS v2)

simdオブジェクトを別のsimdオブジェクトにキャストします。VがTの場合、 simd < T, Abi > を返します。それ以外の場合、Vがスカラ型であれば、 simd < V, simd_abi :: fixed_size < simd < T, Abi > :: size ( ) >> を返します。それ以外の場合、Vはsimd型でなければならず、関数はVを返します。

1) この関数は、以下の条件が満たされない限りオーバーロード解決に参加しません:
  • 入力要素の全ての可能な値が出力要素で表現可能であること
  • is_simd_v < V > がfalseであるか、または V :: size ( ) simd < T, Abi > :: size ( ) と等しいこと
2) この関数は、 is_simd_v < V > がfalseであるか、または V :: size ( ) simd < T, Abi > :: size ( ) と等しい場合を除き、オーバーロード解決に参加しません。

目次

パラメータ

v - 入力SIMDオブジェクト

戻り値

i番目の要素が static_cast < To > ( v [ i ] ) で初期化されたsimdオブジェクト。ここでToは指定された出力要素型です。

注記

TS仕様には simd_cast および static_simd_cast simd_mask に対するオーバーロードが欠如しています。libstdc++実装では、不足しているオーバーロードを std :: experimental :: __proposed 名前空間で提供しています。既に使用している場合

namespace stdx = std::experimental;

ショートカットとして、ご利用いただくと便利かもしれません

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

代わりに、libstdc++は __cvt ( ) メンバー関数を simd_mask 内に実装しており、これによりマスクの暗黙的変換が可能となります。参照: https://github.com/VcDevel/std-simd/issues/41