在 main 中将 istream 定义为全局变量
Defining istream as global variable in main
我想并行读取压缩文件。我需要定义全局 istream(将其引用传递给读取函数)。这是我的代码。
#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/gzip.hpp>
std::istream &instream;
int main(int argc, char** argv) {
std::ifstream file("test.gz", std::ios_base::in |std::ios_base::binary);
boost::iostreams::filtering_streambuf<boost::iostreams::input> inbuf;
inbuf.push(boost::iostreams::gzip_decompressor());
inbuf.push(file);
instream(&inbuf);
//do something ...
file.close();
}
我也试过这个:
std::istream tmp(&inbuf);
instream = tmp;
似乎什么都不起作用。如何在主函数中初始化全局 istream 变量?
您可以从 std::istream 派生并附加一个缓冲区:
// Omitting boost in this example
#include <iostream>
class global_istream : public std::istream
{
public:
global_istream() {};
};
// No reference
global_istream instream;
int main(int argc, char** argv) {
// Attach a buffer to the global stream.
// Any usage of instream before the buffer has been attached is fatal.
instream.rdbuf(std::cin.rdbuf());
// In your case: instream.rdbuf(&inbuf);
//do something ...
std::string s;
instream >> s;
std::cout << s << 'n';
// Detttach the buffer from the global stream.
// Any usage of instream after the buffer has been detached is fatal.
instream.rdbuf(nullptr);
}
也许更好,使用一个函数:
std::istream& instream()
{
static std::ifstream file("test.gz", std::ios_base::in |std::ios_base::binary);
static boost::iostreams::filtering_streambuf<boost::iostreams::input> inbuf;
auto setup_buffer = [] {
inbuf.push(boost::iostreams::gzip_decompressor());
inbuf.push(file);
return &inbuf;
};
static std::istream instream(setup_buffer());
return instream;
}
相关文章:
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 包括一个类来定义全局变量参数 c++ :(
- 访问另一个.cpp文件中的.cpp文件中定义的全局变量
- 在主循环外部多个文件上定义全局变量
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 全局使用变量定义和C 声明
- 如何访问从C 编译的动态库中定义的全局变量
- 即使在定义类后也无法在C++中声明全局变量?
- 我们可以通过使用 "dot" 运算符在类之外定义类变量来制作全局变量吗?
- 当在其中定义全局变量时,如何在.cpp中包含 C 样式的 .h
- 在 main() 中定义全局变量
- 如何管理多个文件、全局变量和定义
- C 使用c库,其中包含标题文件中定义的全局变量
- 从定义变量的位置以外的程序中检索 C 全局变量
- 我可以在 MFC 应用程序中定义全局变量的位置
- 如何在if/else序列中定义未知类型的全局变量
- GCC链接器抱怨对现有全局变量的未定义引用
- 当 f & g 修改相同的全局变量时,表达式 f() 的值是否> g() 未定义或未指定?
- 将全局变量定义为散列