jjzjj

c++ - 如何以允许传递临时对象的方式将 std::istream 传递给函数?

我正在尝试创建一个构造函数来从给定的任何istream加载资源。我似乎无法找出将istream参数传递给构造函数的最佳方法。Loader::Loader(istreamstream);由于对象切片,这个显然很糟糕,所以别无选择。Loader::Loader(istream&stream);这就是我现在使用的,看起来还不错。但是它有一个重要的问题——你不能给它一个临时的,因为临时的不能绑定(bind)到非常量引用!例如,以下将不起作用:Container():mLoader(ifstream("path/file.txt",ios::binary){}这是一个相当大的限制,因为我现在被迫

c++ - 为什么 std::istream 不承担其 streambuf 的所有权?

我正在为视频游戏编写某种虚拟文件系统库,例如CRI中间件的ROFS(参见Wikipedia)。我对库的意图是提供访问我开发的游戏资源的自然方式,这些资源存储一些嵌入在可执行文件中的数据,一些在媒体上,一些在本地用户的硬盘驱动器上(首选项,保存游戏文件等).访问这些资源应该像调用一样简单std::auto_ptrdefaultConfigIStream(fslib.inputStream("self://defaultConfig.ini"));std::auto_ptrdefaultConfigOStream(fslib.outputStream("localappdata://con

c++ - Boost 属性树的并发问题

我开发了一个简单的包装器,它用Boost属性树封装了一个JSONObject。问题是此代码中的段错误:voidJSONObject::parse(conststd::string&text){std::istringstreamss(text);boost::property_tree::read_json(ss,*pt);}一些上下文,我正在使用JSON进行消息序列化。如果程序只使用一个线程,则它可以毫无问题地工作。但是,如果程序使用两个线程,则在上述代码的最后一行会出现段错误。每个线程都有自己的JSONObject对象,线程之间不共享任何变量。我的想法是,流可能在内部不是线程安全的

c++ - istream 提取的字符 >> double

示例代码atColiru:#include#include#includeintmain(){doubled;std::strings;std::istringstreamiss("234cdefipxngh");iss>>d;iss.clear();iss>>s;std::cout我在这里阅读N3337(大概与C++11相同)。在[istream.formatted.arithmetic]中我们有(释义):operator>>(double&val);Asinthecaseoftheinserters,theseextractorsdependonthelocale’snum_get

c++ - 如何将 istream * 转换为字符串或仅打印它?

连接器/C++的以下函数部分,它返回一个istream*。如果我只是尝试打印它,它会显示十六进制或内存位置,因为它是*​​类型。istream*stream=res->getBlob(1);我试着用这个阅读和打印它:strings;while(getline(*stream,s))cout但这会因访问冲突而崩溃。我可以通过其他方式打印它或将其转换为字符串吗?getline之前stream的值:流0x005f3e88{_Chcount=26806164129143632}std::basic_istream>*所以它似乎对我有效。如果失败,我认为它将为null或0

c++ - 什么是在此文件流中抛出异常?

我不明白是什么在我的输入文件流中抛出异常。我以前做过几乎完全一样的事情,没有任何问题。std::stringaccnts_input_file="absolute_path/account_storage.txt";std::stringstrLine;std::ifstreamistream;istream.exceptions(std::ifstream::failbit|std::ifstream::badbit);try{istream.open(accnts_input_file.c_str());while(std::getline(istream,strLine)){st

c++ - peek() 前面有多个地方?

假设我有一个外部while循环来读取每个字符并将其输出到控制台。如果找到一个词,我还想标记它,通过使用peek方法,我可以找到一个词的第一个实例。有没有办法窥视前方的多个地方。例如,如果我要查找“发薪日”一词。我知道我可以将它输入到一个字符串中并搜索一个字符串,但我想以二进制模式读取文件并且我不想从外循环中带走任何值。如果我有一个带有读取方法的内部循环,则这些值不会通过外部循环显示。谢谢intmain()ifstreamstrm;char*chr=newchar;strm.open("mytext.txt",ios::out|ios::binary);while(strm.read(c

c++ - 返回文本文件 C++ 上的一行

我的程序使用以下命令从文本文件中读取一行:std::ifstreammyReadFile("route.txt");getline(myReadFile,line)如果它找到了我正在寻找的东西(标签),它就会将该行存储在一个临时字符串中。在找到其他标签之前,我不想继续此操作,如果我找到其他标签,我希望能够返回到上一行,以便程序再次读取其他标签并执行其他操作。我一直在研究putback()和unget()我对如何使用它们以及它们是否可能是正确答案感到困惑。 最佳答案 最好考虑一种一次性算法,该算法将第一个标记可能需要的内容存储在内存中

c++ - 输入迭代器跳过空格,任何防止这种跳过的方法

我正在从一个文件中读取一个字符串,直到我到达一个定界字符,即美元符号。但是输入迭代器正在跳过空格,因此创建的字符串没有空格。在这种情况下不是我想要的。有什么办法可以阻止跳过行为吗?如果是的话怎么办?这是我的测试代码。#include#include#include#include//istreamiteratorisskippingwhitespace.HowdoIgetallchars?voidreadTo(std::istream_iteratoriit,std::string&replaced){while(iit!=std::istream_iterator()){charch

c++ - istream (ostream) 与 bool

这是一个读取尽可能多的单词的C++代码尽可能从给定的文本文件开始,直到遇到EOF。stringtext;fstreaminputStream;inputStream.open("filename.txt");while(inputStream>>text)cout我的问题是:将while循环的条件(即inputStream>>text)转换为bool值(即true或false)到底执行了什么过程?我自己对这个问题的回答是:据我了解,inputStream>>text应该返回另一个(文件)输入流。当EOF到达时,流似乎为NULL。NULL可以定义为0,相当于false。我的回答有道理吗?