Übergabe eines std::array unbekannter Größe an eine Funktion
Frage:
Wie kann eine Funktion geschrieben werden, um std::arrays bekannten Typs, aber unterschiedlicher Größe zu verarbeiten? Betrachten Sie zum Beispiel das folgende Beispiel:
<code class="cpp">// Hypothetical function void mulArray(std::array<int, ?>& arr, const int multiplier) { for (auto& e : arr) { e *= multiplier; } }</code>
Wie kann eine Funktion wie mulArray definiert werden, um Arrays unterschiedlicher Größe wie die folgenden zu berücksichtigen:
<code class="cpp">std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> arr3;</code>
Antwort:
Leider ist es nicht möglich, eine Funktion zu schreiben, die std::arrays unbekannter Größe akzeptiert, ohne eine Funktionsvorlage zu verwenden oder einen anderen Containertyp wie std::vector zu verwenden.
Funktionsvorlagen:
<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>
In diesem Beispiel ist die mulArray-Funktion als Funktionsvorlage definiert, sodass sie Arrays beliebiger Größe verarbeiten kann. Der SIZE-Parameter gibt die Größe des Arrays zur Kompilierungszeit an.
Beispielverwendung:
<code class="cpp">// Array of size 17 std::array<int, 17> arr1; // Function call with template instantiation for size 17 mulArray(arr1, 3);</code>
Hinweis: Bei Verwendung von Funktionsvorlagen Die Funktionsdefinition muss in einer Header-Datei platziert werden, damit während der Kompilierung darauf zugegriffen werden kann.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit std::Arrays unterschiedlicher Größe in C-Funktionen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!