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!