std::define_static_array
| Défini dans l'en-tête <meta>
|
||
template< ranges::input_range R >
consteval std::span<const ranges::range_value_t<R>> define_static_array( R&& r );
|
(depuis C++26) | |
Promeut un tableau vers le stockage statique.
Soit N égal à static_cast<std::size_t>(ranges::size(r)) si ranges::size(r) est une expression constante, ou à std::dynamic_extent sinon. L'effet est équivalent à :
using T = ranges::range_value_t<R>;
std::meta::info array = std::meta::reflect_constant_array(r);
if (std::meta::is_array_type(std::meta::type_of(array)))
return std::span<const T, N>(std::meta::extract<const T*>(array),
std::meta::extent(std::meta::type_of(array)));
else
return std::span<const T, N>(static_cast<const T*>(nullptr), 0);
Paramètres
| r | - | une input_range dont les éléments sont constructibles par copie et ont un type structurel |
Valeur de retour
Si la taille de r n'est pas nulle, un span construit à partir d'un tableau de type const T[N] (où T est ranges::range_value_t<R> et N est la taille de r). Chaque élément du tableau est initialisé à partir de la valeur ou de l'objet représenté par std::meta::reflect_constant(static_cast<T>(*it)), où it est un itérateur vers l'élément correspondant de r.
Sinon (la taille de r est nulle), un span vide.
Notes
En tant qu'objet paramètre de modèle, l'objet tableau résultant (s'il existe) a une durée de stockage statique. Les plages dont le contenu est équivalent aux arguments de modèle correspondent au même objet tableau.
L'objet tableau est un objet potentiellement non unique.
| Test de fonctionnalité macro | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_define_static |
202506L |
(C++26) | std::define_static_array
|
Exemple
#include <algorithm>
#include <meta>
#include <print>
#include <vector>
constexpr std::vector<double> precompute_angles(std::size_t size)
{
std::vector<double> angles(size);
for (int i{}; double& angle : angles)
angle = 360.0 / size * i++;
return angles;
}
consteval std::span<const double> precompute_angles_arr(std::size_t size)
{
std::vector<double> angles = precompute_angles(size);
return std::define_static_array(angles);
}
int main()
{
// std::vector<double> angles = precompute_angles(7);
// error: call to consteval function ‘precompute_angles(7)’ is not a constant
// expression because it refers to a result of ‘operator new’
std::span<const double> angles = precompute_angles_arr(7);
for (double angle : angles)
std::print("{:.1f} ", angle);
std::println();
}
Sortie :
0.0 51.4 102.9 154.3 205.7 257.1 308.6
Voir aussi
(C++26) |
promeut une chaîne de compilation en stockage statique, retournant un pointeur vers le premier caractère de la chaîne statique (modèle de fonction) |
(C++26) |
promeut une valeur de compilation en stockage statique, retournant un pointeur vers l'objet statique (modèle de fonction) |
(C++26) |
promeut un tableau de compilation en stockage statique, retournant une réflexion représentant le tableau statique (modèle de fonction) |