Skip to content

Latest commit

 

History

History
111 lines (85 loc) · 2.88 KB

op_constructor.md

File metadata and controls

111 lines (85 loc) · 2.88 KB

コンストラクタ

  • linalg[meta header]
  • function[meta id-type]
  • std::linalg[meta namespace]
  • layout_blas_packed::mapping[meta class]
  • cpp26[meta cpp]
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型で表現できること。

効果

  • (3) : eを用いてextents_を直接非リスト初期化する。
  • (4) : other.extetns()を用いてextents_を直接非リスト初期化する。

例外

投げない

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);
  }
}
  • mapping[color ff0000]
  • linalg::layout_blas_packed[link ../../layout_blas_packed.md]

出力

バージョン

言語

  • C++26

処理系

参照