Это не конструктор с другим именем. Это специализация. Так что basic_ofstream
это шаблон. Тогда у вас есть два «ярлыка»:
ofstream for basic_ofstream<char>
wofstream for basic_ofstream<wchar_t>
Почему они названы базовыми ... может быть, потому что стандартная библиотека предоставляет только базовые версии, а клиент может писать неосновные классы и подключать их. Если вы посмотрите на стандартную диаграмму библиотек io , все компоненты имеют префикс «основной».
Обычно это заменяет basic_streambuf
любой пользовательский связывания streambuf
на stream
. Один пример взят из boost
#include <ostream>
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/stream.hpp>
namespace io = boost::iostreams;
int main()
{
io::stream_buffer<io::file_sink> buf("log.txt");
std::ostream out(&buf);
// out writes to log.txt
}
Это реализация буфера, работающая с std::ostream
.
Если вы хотите изучить причудливые реализации, вы можете получить дополнительную информацию из библиотеки boost::iostreams
и их примеров. Хороший с gzip. Работает с ifstream
:
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/gzip.hpp>
int main()
{
using namespace std;
ifstream file("hello.gz", ios_base::in | ios_base::binary);
filtering_streambuf<input> in;
in.push(gzip_decompressor());
in.push(file);
boost::iostreams::copy(in, cout);
}