Espacios de nombres
Variantes

std::mdspan<T,Extents,LayoutPolicy,AccessorPolicy>::mdspan

De cppreference.com
 
 
 
 
<tbody> </tbody>
constexpr mdspan();
(1) (desde C++23)
template< class... OtherIndexTypes > constexpr explicit mdspan( data_handle_type p, OtherIndexTypes... exts );
(2) (desde C++23)
template< class OtherIndexType, std::size_t N > constexpr explicit(N != rank_dynamic()) mdspan( data_handle_type p, std::span<OtherIndexType, N> exts );
(3) (desde C++23)
template< class OtherIndexType, std::size_t N > constexpr explicit(N != rank_dynamic()) mdspan( data_handle_type p, const std::array<OtherIndexType, N>& exts );
(4) (desde C++23)
constexpr mdspan( data_handle_type p, const extents_type& ext );
(5) (desde C++23)
constexpr mdspan( data_handle_type p, const mapping_type& m );
(6) (desde C++23)
constexpr mdspan( data_handle_type p, const mapping_type& m, const accessor_type& a );
(7) (desde C++23)
template< class OtherElementType, class OtherExtents, class OtherLayoutPolicy, class OtherAccessor > constexpr explicit(/* see below */) mdspan( const mdspan<OtherElementType, OtherExtents, OtherLayoutPolicy, OtherAccessor>& other );
(8) (desde C++23)
constexpr mdspan( const mdspan& rhs ) = default;
(9) (desde C++23)
constexpr mdspan( mdspan&& rhs ) = default;
(10) (desde C++23)

Construye un mdspan, opcionalmente utilizando el identificador de datos proporcionado por el usuario p, el mapeo de diseño m y el descriptor de acceso a. Si se proporcionan dimensiones exts o ext, se convierten a extents_type y se utilizan para inicializar el mapeo de diseño.

1) Construye un mdspan vacío. Inicializa por valor ptr_, map_, y acc_.
  • El comportamiento no está definido si [0map_.required_span_size()) no es un rango accesible de ptr_ y acc_ para los valores de map_ y acc_ después de la invocación de este constructor.
  • Esta sobrecarga solo participa en la resolución de sobrecargas si
  • rank_dynamic() > 0 es true,
  • std::is_default_constructible_v<data_handle_type> es true,
  • std::is_default_constructible_v<mapping_type> es true, y
  • std::is_default_constructible_v<accessor_type> es true.
2) Construye un mdspan sobre los datos subyacentes a los que hace referencia p para las dimensiones representadas por exts.... Inicializa por valor acc_, inicializa directamente (no por lista) ptr_ con std::move(p) y map_ con extents_type(static_cast<index_type>(std::move(exts))...).
  • El comportamiento no está definido si [0map_.required_span_size()) no es un rango accesible de ptr_ y acc_ para los valores de map_ y acc_ después de la invocación de este constructor.
  • Sea N sizeof...(OtherIndexTypes). Esta sobrecarga solo participa en la resolución de sobrecargas si
  • (std::is_convertible_v<OtherIndexTypes, index_type> && ...) es true,
  • (std::is_nothrow_constructible<index_type, OtherIndexTypes> && ...) es true,
  • N == rank() || N == rank_dynamic() es true,
  • std::is_constructible_v<mapping_type, extents_type> es true, y
  • std::is_default_constructible_v<accessor_type> es true.
3,4) Construye un mdspan sobre los datos subyacentes a los que hace referencia p para las dimensiones representadas por el paquete exts. Inicializa por valor acc_, inicializa directamente (no por lista) ptr_ con std::move(p) y map_ con extents_type(exts).
  • El comportamiento no está definido si [0map_.required_span_size()) no es un rango accesible de ptr_ y acc_ para los valores de map_ y acc_ después de la invocación de este constructor.
  • Esta sobrecarga solo participa en la resolución de sobrecargas si
  • std::is_convertible_v<const OtherIndexTypes&, index_type> es true,
  • std::is_nothrow_constructible<index_type, const OtherIndexTypes&> es true,
  • N == rank() || N == rank_dynamic() es true,
  • std::is_constructible_v<mapping_type, extents_type> es true, y
  • std::is_default_constructible_v<accessor_type> es true.
5) Construye un mdspan sobre los datos subyacentes a los que hace referencia p para las dimensiones representadas por ext. Inicializa por valor acc_, inicializa directamente (no por lista) ptr_ con std::move(p) y map_ con exts.
  • El comportamiento no está definido si [0map_.required_span_size()) no es un rango accesible de p y acc_ para los valores de map_ y acc_ después de la invocación de este constructor.
  • Esta sobrecarga solo participa en la resolución de sobrecargas si
  • std::is_constructible_v<mapping_type, const mapping_type&> es true, y
  • std::is_default_constructible_v<accessor_type> es true.
6) Construye un mdspan sobre los datos subyacentes a los que hace referencia p con mapeo de diseño m. Inicializa por valor acc_, inicializa directamente (no por lista) ptr_ con std::move(p) y map_ con m.
  • El comportamiento no está definido si [0m.required_span_size()) no es un rango accesible de p y acc_ para los valores de acc_ después de la invocación de este constructor.
  • Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_default_constructible_v<accessor_type> es true.
7) Construye un mdspan sobre los datos subyacentes a los que hace referencia p con mapeo de diseño m y descriptor de acceso a. Inicializa directamente (no por lista) ptr_ con std::move(p), map_ con m y acc_ con a.
  • El comportamiento no está definido si [0m.required_span_size()) no es un rango accesible de p y a después de la invocación de este constructor.
8) Convirtiendo constructor de otro mdspan. Inicializa directamente (no por lista) ptr_ con other.ptr_, map_ con other.map_ y acc_ con other.acc_.
  • El comportamiento no está definido si:
  • [0map_.required_span_size()) no es un rango accesible de ptr_ y acc_ para los valores de map_ y acc_ después de la invocación de este constructor, o
  • para cada índice de rango r de extents_type, extents_type::static_extent(r) == std::dynamic_extent
    || extents_type::static_extent(r) == other.extent(r)
    es false.
  • Esta sobrecarga solo participa en la resolución de sobrecargas si
  • std::is_constructible_v<mapping_type, const OtherLayoutPolicy::
    template mapping<OtherExtents>&>
    es true, y
  • std::is_constructible_v<accessor_type, const OtherAccessor&> es true.
  • El programa está mal formado si:
  • std::is_constructible_v<data_handle_type,
    const OtherAccessor​::​data_handle_type&>
    es false, o
  • std::is_constructible_v<extents_type, OtherExtents> es false.
  • La expresión dentro de explicit es equivalente a: !std::is_convertible_v<const OtherLayoutPolicy::
    template mapping<OtherExtents>&, mapping_type>
    || !std::is_convertible_v<const OtherAccessor&, accessor_type>

Parámetros

p - Un identificador de los datos subyacentes.
m - Un mapeo de diseño.
a - Un descriptor de acceso.
ext - Un objeto std::extents.
exts - Representa el tamaño multidimensional.
other - Otro mdspan desde el que convertir.
rhs - Otro mdspan para copiar o mover.

Ejemplo

Referencias

  • El estándar C++23 (ISO/IEC 14882:2023):
  • 24.7.3.6.2 Constructors [mdspan.mdspan.cons]

Véase también