Maison  >  Article  >  développement back-end  >  std::array de taille inconnue peut-il être transmis directement à une fonction ?

std::array de taille inconnue peut-il être transmis directement à une fonction ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 04:44:29294parcourir

Can std::array with Unknown Size be Passed to a Function Directly?

Passer un std::array de taille inconnue à une fonction

Dans cet exemple de code, l'objectif est de créer une fonction qui prend un std::array de un type connu mais une taille inconnue. Il s'agit d'un scénario courant qui peut survenir dans diverses tâches de programmation.

<code class="cpp">// made up example
void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}

// lets imagine these being full of numbers
std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);</code>

Cependant, lors de la recherche d'une solution par le développeur, ils ont rencontré des suggestions pour utiliser des modèles de fonction. Bien que les modèles de fonctions puissent résoudre ce problème, ils peuvent introduire une complexité supplémentaire et ne constituent pas toujours l'approche la plus efficace.

La question posée est de savoir s'il existe un moyen plus simple d'accomplir cette tâche, similaire à la façon dont on travaillerait avec tableaux simples de style C. Malheureusement, la réponse est négative. En C , il n'existe pas de moyen direct de passer un tableau de taille inconnue à une fonction sans utiliser de modèles de fonctions.

Pour que cela soit possible, il faut en effet recourir à des modèles de fonctions, comme illustré ci-dessous :

<code class="cpp">template<std::size_t SIZE>
void mulArray(std::array<int, SIZE>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>

Ce modèle de fonction peut être utilisé avec des tableaux de n'importe quelle taille, comme démontré dans l'exemple en direct suivant : https://godbolt.org/z/sV49sK

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn