Passer un std::array de taille inconnue à une fonction
Question :
Comment écrire une fonction pour gérer des std::arrays de type connu mais de tailles variables ? Par exemple, considérons l'exemple suivant :
<code class="cpp">// Hypothetical function void mulArray(std::array<int, ?>& arr, const int multiplier) { for (auto& e : arr) { e *= multiplier; } }</code>
Comment une fonction telle que mulArray peut-elle être définie pour s'adapter à des tableaux de différentes tailles comme celui-ci :
<code class="cpp">std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> arr3;</code>
Réponse :
Malheureusement, il n'est pas possible d'écrire une fonction qui accepte std :: tableaux de tailles inconnues sans utiliser un modèle de fonction ou sans employer un type de conteneur différent, tel que std :: vector.
Modèles de fonctions :
<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>
Dans cet exemple, la fonction mulArray est définie comme un modèle de fonction, lui permettant de gérer des tableaux de n'importe quelle taille. Le paramètre SIZE spécifie la taille du tableau au moment de la compilation.
Exemple d'utilisation :
<code class="cpp">// Array of size 17 std::array<int, 17> arr1; // Function call with template instantiation for size 17 mulArray(arr1, 3);</code>
Remarque : Lors de l'utilisation de modèles de fonction, la définition de la fonction doit être placée dans un fichier d'en-tête pour être accessible lors de la compilation.
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!