Heim  >  Artikel  >  Backend-Entwicklung  >  Kann std::array mit unbekannter Größe direkt an eine Funktion übergeben werden?

Kann std::array mit unbekannter Größe direkt an eine Funktion übergeben werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 04:44:29294Durchsuche

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

Übergabe eines std::array unbekannter Größe an eine Funktion

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn