- 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
からの変換コンストラクタ
- (4) :
is_convertible_v
<extents_type, OtherExtents>
- (3) :
- Nを
e.extent(0)
としたとき、N * (N + 1)をindex_type
型で表現できること。 e.extent(0) == e.extent(1)
- Nを
- (4) :
- Nを
other.extents().extent(0)
としたとき、N * (N + 1)をindex_type
型で表現できること。
- Nを
- (3) :
e
を用いてextents_
を直接非リスト初期化する。 - (4) :
other.extetns()
を用いてextents_
を直接非リスト初期化する。
投げない
- (4) :
!
is_convertible_v
<OtherExtents, extents_type>
#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
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??