std::experimental::simd_cast, std::experimental::static_simd_cast
From cppreference.com
< cpp | experimental | simd
| ヘッダー <experimental/simd> で定義 |
||
| template< class V, class T, class Abi > /*下記参照*/ simd_cast( const simd<T, Abi>& v ) noexcept; |
(1) | (parallelism TS v2) |
| template< class V, class T, class Abi > /*下記参照*/ 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()であるかのいずれかでない限り、オーバーロード解決に参加しません。
目次 |
[編集] Parameters
| v | - | 入力simdオブジェクト |
[編集] Return value
i番目の要素がstatic_cast<To>(v[i])に初期化されたsimdオブジェクト。ここで、Toは指定された出力要素型です。
[編集] Notes
TS仕様には、simd_mask用のsimd_castおよびstatic_simd_castオーバーロードがありません。libstdc++の実装では、std::experimental::__proposed名前空間に不足しているオーバーロードが提供されています。すでにショートカットを使用している場合は、
namespace stdx = std::experimental;
それを使用することに興味があるかもしれません。
namespace stdx { using namespace std::experimental; using namespace std::experimental::__proposed; }
または、libstdc++はsimd_maskに__cvt()メンバ関数を実装しており、これによりマスクの暗黙的な変換が可能になります。関連項目: https://github.com/VcDevel/std-simd/issues/41
[編集] Example
| このセクションは未完成です 理由: 例がありません |