将未知大小的 std::array 传递给函数
问题:
如何编写函数来处理已知类型但大小不同的 std::arrays?例如,考虑以下示例:
<code class="cpp">// Hypothetical function void mulArray(std::array<int, ?>& arr, const int multiplier) { for (auto& e : arr) { e *= multiplier; } }</code>
如何定义诸如 mulArray 这样的函数来容纳不同大小的数组,如下所示:
<code class="cpp">std::array<int, 17> arr1; std::array<int, 6> arr2; std::array<int, 95> arr3;</code>
答案:
不幸的是,如果不使用函数模板或使用不同的容器类型(例如 std::vector),就不可能编写接受未知大小的 std::array 的函数。
函数模板:
<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>
在此示例中,mulArray 函数被定义为函数模板,允许其处理任何大小的数组。 SIZE 参数指定编译时数组的大小。
用法示例:
<code class="cpp">// Array of size 17 std::array<int, 17> arr1; // Function call with template instantiation for size 17 mulArray(arr1, 3);</code>
注意: 使用函数模板时,函数定义必须放在头文件中才能在编译期间访问。
以上是如何处理 C 函数中不同大小的 std::Arrays?的详细内容。更多信息请关注PHP中文网其他相关文章!