Passer un std::array de taille inconnue à une fonction
En C , comment pouvez-vous créer une fonction qui accepte un std : :array d'un type connu, mais d'une taille inconnue ?
Considérons l'exemple suivant :
<code class="cpp">void mulArray(std::array<int, ?>& arr, const int multiplier) { for(auto& e : arr) { e *= multiplier; } }</code>
Étant donné cette fonction, vous pouvez créer std::arrays de différentes tailles et les transmettre à mulArray :
<code class="cpp">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>
Existe-t-il un moyen plus simple d'y parvenir, semblable à l'utilisation de tableaux simples de style C ?
Non, il n'est pas possible d'effectuer cela opération sans utiliser de modèles de fonction ou de conteneurs alternatifs comme std :: vector.
Solution de modèles de fonction
Pour créer une fonction générique capable de gérer std :: tableaux de n'importe quelle taille , vous devez utiliser un modèle de fonction :
<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 définit une fonction qui prend un tableau d'entiers de n'importe quelle taille et multiplie chaque élément par le multiplicateur donné.
Un exemple réel de cette implémentation peut être trouvée ici : [Exemple en direct](https://godbolt.org/z/Y932XW)
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!