C++ 将数组打印到任何输出对象(按函数)
C++ Printing array to any output object (by function)
我正在尝试创建一个函数,它可以将数组的内容"打印"到任何输出对象。它看起来有点像这样:
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);
相关文章:
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数