C++11 C++;流的类型与流的基本类型

C++11 C++;流的类型与流的基本类型,c++11,C++11,我很困惑 我正在学习ofstream,它似乎真的是一个基本的ofstream,根据: 一个名为basic_of stream的类和一个名为ofstream的构造函数的原因是什么“基本”表示存在非基本版本。为什么构造函数名与类名不同?没有名为流的的构造函数(构造函数没有名称),也没有名为流的基本类(尽管Microsoft文档声称) basic_of stream是一个类模板(与类不同),而of stream是一个typedef名称a.k.a.类型别名,它引用了该模板的一个实例化,特别是ba

我很困惑

我正在学习ofstream,它似乎真的是一个基本的ofstream,根据:


一个名为basic_of stream的类和一个名为ofstream的构造函数的原因是什么“基本”表示存在非基本版本。为什么构造函数名与类名不同?

没有名为流的
的构造函数(构造函数没有名称),也没有名为
流的基本类(尽管Microsoft文档声称)

basic_of stream
是一个类模板(与类不同),而
of stream
是一个
typedef
名称a.k.a.类型别名,它引用了该模板的一个实例化,特别是
basic_of stream

wofstream
是另一个这样的名称,它指的是
basic_of stream


这是C++标准库用来定义不同类型的变体的命名约定,它们使用的字符类型不同。遵循此约定的另一组名称是

basic\u string
string
wstring

这不是另一个命名的构造函数。这是一个专业。所以
basic_of stream
是一个模板。然后您有两个“快捷方式名称”:

这是一个使用
std::ostream
的缓冲区实现

若您想探索奇特的实现,可以从库及其示例中检出更多。很好的一个是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);
}
#包括
#包括
#包括
#包括
#包括
int main()
{
使用名称空间std;
ifstream文件(“hello.gz”,ios_base::in | ios_base::binary);
过滤_streambuf in;
in.push(gzip_decompressor());
in.push(文件);
boost::iostreams::copy(in,cout);
}
#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
}
#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);
}