ホームページ  >  記事  >  バックエンド開発  >  サイズが不明な std::array を関数に直接渡すことはできますか?

サイズが不明な std::array を関数に直接渡すことはできますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-25 04:44:29294ブラウズ

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

サイズ不明の std::array を関数に渡す

このコード例の目標は、次の std::array を受け取る関数を作成することです。タイプはわかっていますが、サイズは不明です。これは、さまざまなプログラミング タスクで発生する可能性のある一般的なシナリオです。

<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>

しかし、開発者が解決策を探しているときに、関数テンプレートを使用するという提案に遭遇しました。関数テンプレートはこの問題を解決できますが、複雑さが増す可能性があり、必ずしも最も効率的なアプローチであるとは限りません。

ここでの疑問は、このタスクを実行するための、より簡単な方法があるかどうかです。プレーンな C スタイルの配列。残念ながら、答えは否定的です。 C では、関数テンプレートを使用せずにサイズが不明な配列を関数に直接渡す方法はありません。

それを可能にするには、以下に示すように、実際に関数テンプレートに頼る必要があります。

<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>

次のライブ例で示すように、この関数テンプレートは任意のサイズの配列で使用できます: https://godbolt.org/z/sV49sK

以上がサイズが不明な std::array を関数に直接渡すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。