最終更新日時(UTC):
が更新

履歴 編集

function
<linalg>

std::linalg::layout_blas_packed::mapping::コンストラクタ(C++26)

constexpr mapping() noexcept = default; // (1)

constexpr mapping(const mapping&) noexcept = default; // (2)

constexpr mapping(const extents_type&) noexcept; // (3)

template<class OtherExtents>
constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
  mapping(const mapping<OtherExtents>& other) noexcept; // (4)

概要

  • (1) : デフォルトコンストラクタ
  • (2) : コピーコンストラクタ
  • (3) : extentsからの変換コンストラクタ
  • (4) : 他mappingからの変換コンストラクタ

テンプレートパラメータ制約

事前条件

  • (3) :
    • Nをe.extent(0)としたとき、N * (N + 1)をindex_type型で表現できること。
    • e.extent(0) == e.extent(1)
  • (4) :
    • Nをother.extents().extent(0)としたとき、N * (N + 1)をindex_type型で表現できること。

効果

例外

投げない

explicitになる条件

#include <cassert>
#include <mdspan>
#include <linalg>
namespace linalg = std::linalg;

using LayoutPacked = linalg::layout_blas_packed<linalg::lower_triangle_t, linalg::column_major_t>
using Ext3x3 = std::extents<size_t, 3, 3>;
using ExtNxN = std::dextents<size_t, 2>;

int main()
{
  // (1) : デフォルトコンストラクタ
  {
    LayoutPacked::mapping<Ext3x3> map1;
    assert(map1.required_span_size() == 6);
  }
  // (2) : コピーコンストラクタ
  {
    LayoutPacked::mapping<Ext3x3> map2_a;
    LayoutPacked::mapping<Ext3x3> map2_b = map2_a;
    assert(map2_a == map2_b);
  }
  // (3) : extentsからの変換コンストラクタ
  {
    ExtNxN ext{3, 3};
    LayoutPacked::mapping<ExtNxN> map3 = ext;
    assert(map3.extents() == ext);
  }
  // (4) : 他mappingからの変換コンストラクタ
  {
    LayoutPacked::mapping<Ext3x3> map4_a;
    LayoutPacked::mapping<ExtNxN> map4_b = map4_a;
    assert(map4_a == map4_b);
  }
}

出力

バージョン

言語

  • C++26

処理系

参照