Skip to content

Latest commit

 

History

History
87 lines (68 loc) · 2.4 KB

File metadata and controls

87 lines (68 loc) · 2.4 KB

推論補助

  • simd[meta header]
  • std::simd[meta namespace]
  • basic_vec[meta class]
  • cpp26[meta cpp]
namespace std::simd {
  template<class R, class... Ts>
  basic_vec(R&& r, Ts...) -> /*see below*/;           // (1)

  template<std::size_t Bytes, class Abi>
  basic_vec(basic_mask<Bytes, Abi>) -> /*see below*/; // (2)
}
  • basic_mask[link ../basic_mask.md]

概要

basic_vecクラステンプレートの型推論補助。

  • (1) : 連続範囲(contiguous range)かつ要素数が定数式となる範囲から推論する。推論される型はvec<std::ranges::range_value_t<R>, std::ranges::size(r)>と等価である。
  • (2) : basic_maskから推論する。推論される型はdecltype(+k)(マスクに単項プラスを適用して得られるbasic_vec)と等価である。

#include <simd>
#include <array>
#include <print>

namespace simd = std::simd;

int main()
{
  // (1) 要素数が定数となる連続範囲から推論する
  std::array<int, 4> arr = {1, 2, 3, 4};
  simd::basic_vec v {arr};                       // vec<int, 4>

  // (2) マスクから推論する
  simd::vec<int, 4> a = [](int i) { return i; }; // {0, 1, 2, 3}
  auto m = (a < 2);                              // {true, true, false, false}
  simd::basic_vec w {m};                         // {1, 1, 0, 0}

  for (int i = 0; i < v.size(); ++i) {
    std::print("{} ", v[i]);
  }
  std::println("");

  for (int i = 0; i < w.size(); ++i) {
    std::print("{} ", w[i]);
  }
  std::println("");
}
  • simd::basic_vec[color ff0000]
  • simd::vec[link ../basic_vec.md]
  • v.size()[link size.md]
  • w.size()[link size.md]
  • v[i][link op_at.md]
  • w[i][link op_at.md]

出力

1 2 3 4 
1 1 0 0 

バージョン

言語

  • C++26

処理系

関連項目

参照