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