C++ 将数组打印到任何输出对象(按函数)

C++ Printing array to any output object (by function)

本文关键字:对象 函数 输出 任何 数组 打印 C++      更新时间:2023-10-16

我正在尝试创建一个函数,它可以将数组的内容"打印"到任何输出对象。它看起来有点像这样:

template <class T, class Z>
void print(T* array, int& size, Z& obj)
{
    for (int k = 0; k < size; k++)
        Z<< array[k] << " ";
    Z<< std::endl;
}

我希望obj是任何输出对象,如std::cout或任何fstream,所以我可以使用以下命令调用它:

print(arr_name, arr_size, std::cout)

std::ostream file;
print(arr_name, arr_size, file)

不幸的是,在我当前的版本中,它根本不起作用(错误涉及"<<"运算符)。怎么了?甚至有可能创建这样的功能吗?

您使用的不是参数的名称,而是类型。

Z << array[k] << " ";

应该是

obj << array[k] << " ";

此外,将大小作为非const引用传递没有多大意义,因为您需要一个 l 值,const int& size会更好。

但无论如何,这都不会那么通用。最好的解决方案是使用迭代器并完全跳过普通 C 数组,并使用 std::array 作为替代品(这是有意义的,因为您正在使用C++):

template <class T, class Z>
void print(const T& data, Z& obj)
{
  for (const typename T::value_type& element : data)
    obj << element;
  obj << std::endl;
}
std::array<int, 5> data = {1,2,3,4,5};
std::vector<std::string> data2;
print(data, std::cout);
print(data2, std::cout);