gpt4 book ai didi

c++ - 如何将数组类型的动态对象传递给函数?

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:58 25 4
gpt4 key购买 nike

我想将动态大小标准和 typename 类型数组传递给函数。

我不知道该怎么做。为什么我不能只接受对对象数组的引用?

我试过的代码:

#include <iostream>
#include <array>

using namespace std;

template <typename T>
void showArrays(void *myArrayPointer, int size, T type) {
array<T, size> myArray = myArrayPointer;
for (int i = 0; i < size; i++) {
cout << myArray.at(i) << " \n";
}
}

int main()
{
array<int,6> myArray = { 1,2,3,4,5,6 };
cout << "The array is \n";
showArrays(&myArray,6,0);

return 0;
}

但我仍然得到 Size 的预期编译时常量表达式。我的函数头也不是很漂亮。但是我想不出一种方法来使大小动态化,而不传递通用指针或创建类数组的模板,其中大小是一个属性。

最佳答案

没有理由使用 void*在这里。 std::array 的元素类型和大小在编译时是已知的,您可以使用模板捕获它们。

template<typename T, std::size_t N>
void print_arry(const std::array<T, N>& arr)
{
for (const auto& e : arr)
std::cout << e << "\n";
}

将捕获任何 std::array并打印其元素,只要它们有重载 operator << .您也可以使用 T作为元素类型和 N作为函数内部数组的大小,它可以让你编写一个像

这样的累积函数
template<typename T, std::size_t N>
T print_arry(const std::array<T, N>& arr)
{
if (N == 0)
return 0;
T accum = arr[0];
for (std::size_t i = 1; i < N; ++i)
accum += arr[i];
return accum;
}

关于c++ - 如何将数组类型的动态对象传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53602676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com