У меня есть следующий шаблон функции, которая печатает COUT:Howto Pass ссылка на файл функцию для вывода потокового
template <typename T> void prn_vec(const std::vector <T>&arg, string sep="")
{
for (unsigned n = 0; n < arg.size(); n++) {
cout << arg[n] << sep;
}
return;
}
// Usage:
//prn_vec<int>(myVec,"\t");
// I tried this but it fails:
/*
template <typename T> void prn_vec_os(const std::vector <T>&arg,
string sep="",ofstream fn)
{
for (unsigned n = 0; n < arg.size(); n++) {
fn << arg[n] << sep;
}
return;
}
*/
Как я могу изменить его так, что он также принимает дескриптор файла в качестве входных данных и печати в том, что файл, как указано в дескрипторе файла?
Так что мы можем сделать что-то вроде:
#include <fstream>
#include <vector>
#include <iostream>
int main() {
vector <int> MyVec;
MyVec.push_back(123);
MyVec.push_back(10);
ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
// prn_vec(MyVec,myfile,"\t");
myfile.close();
return 0;
}
@ dirkgently: большое спасибо. Но почему вы используете «ostream & o» вместо «ofstream & o»? Кроме того, в основном я использую «ofstream myfile». – neversaint
ofstream - это специализация ostream: все потоки являются потоками, но обратное неверно. Это полезно, когда вы хотите распечатать поток строк или собственный сериализатор. – dirkgently