In diesem Codebeispiel besteht das Ziel darin, eine Funktion zu erstellen, die ein std::array von annimmt ein bekannter Typ, aber eine unbekannte Größe. Dies ist ein häufiges Szenario, das bei verschiedenen Programmieraufgaben auftreten kann.
<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>
Bei der Suche nach einer Lösung stießen die Entwickler jedoch auf Vorschläge, Funktionsvorlagen zu verwenden. Obwohl Funktionsvorlagen dieses Problem lösen können, können sie zusätzliche Komplexität mit sich bringen und sind nicht immer der effizienteste Ansatz.
Die Frage ist, ob es eine einfachere Möglichkeit gibt, diese Aufgabe zu erfüllen, ähnlich wie man damit arbeiten würde einfache Arrays im C-Stil. Leider ist die Antwort negativ. In C gibt es keine direkte Möglichkeit, ein Array unbekannter Größe ohne Verwendung von Funktionsvorlagen an eine Funktion zu übergeben.
Um dies zu ermöglichen, muss man tatsächlich auf Funktionsvorlagen zurückgreifen, wie unten dargestellt:
<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>
Diese Funktionsvorlage kann mit Arrays beliebiger Größe verwendet werden, wie im folgenden Live-Beispiel gezeigt: https://godbolt.org/z/sV49sK
Das obige ist der detaillierte Inhalt vonKann std::array mit unbekannter Größe direkt an eine Funktion übergeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!