Вы имеете в виду:
void
pass_a_line(std::istream& in, std::ostream& out)
{
// error handling left as an exercise
std::string line;
std::getline(in, line);
out << line;
}
Это может работать с любым, что является std::istream
и std::ostream
, например так:
// from a file to cout
// no need to new
std::ifstream in("src.txt");
pass_a_line(in, std::cout);
// from a stringstream to a file
std::istringstream stream("Hi");
std::ofstream out("dest.txt");
pass_a_line(stream, out);
Это делает то, что делает ваш примери программируется для интерфейсов std::istream
и std::ostream
.Но это не общее программирование;это объектно-ориентированное программирование.
Boost.Iostreams может адаптировать классы к std::[i|o|io]stream
s и делает это с помощью универсального программирования.