草庐IT

basic_istream

全部标签

c++ - 继承自 std::basic_streambuf 以写入套接字

我想编写一个我自己的日志记录库,为日志条目发送到的任何地方提供抽象。C++的IO库已经通过std::stringstream和std::fstream提供了这种抽象。我还希望能够从套接字读取/向套接字写入。我读到扩展标准库的正确方法是继承std::basic_streambuf。我不明白的是,如果像std::basic_filebuf那样从std::basic_streambuf继承,那么哪里需要std::ifsream、std::ofstream和std::fstream类?我不能只用std::basic_streambuf的子类实例替换某些流的缓冲区,它输出我想要的地方吗?到目前为

c++ - 不能为 std::basic_string<T> foo = "foo"推导出 T = char?

问题:在下面的代码中,第一个示例的模板参数类型推导似乎失败了,但第二个示例却没有。我不明白为什么第一个样本无法推断出T=char.我会认为T从"foo"转换时可以推导出至std::bacis_string,但即使这不起作用,我也提供了第二个函数参数,我认为它会明确约束T至char.为什么它会失败?Doesnotwork:#include#includetemplatevoidprint(conststd::basic_string&a,conststd::basic_string&b){std::cout错误:string.cpp:14:5:error:nomatchingfuncti

c++ - `std::istream::operator>>()` 可以接受像 stdio 的 %i 格式说明符这样的整数基数前缀吗?

当使用scanf()及其变体时,格式说明符%i将接受十六进制(前缀为“0x”)、八进制(前缀为“0”)或十进制(无前缀)的数据,例如字符串“0x10”、“020”和“16”都被转换为十进制值为16的整数。这可以用std::istream::operator>>格式的输入来完成吗?使用没有i/o操纵器的普通>>i将“0x10”转换为零(或者更确切地说,前导0是,不处理“x10”部分),并且“020”到20。hex、oct和dec操纵符的行为类似于%x、%o和%d分别。我正在寻找像%i一样工作的通用整数输入操纵器。有趣的是,hex操纵器可能同时接受“0x10”和“10”,将它们转换为16进

c++ - 如何将 istream 与字符串一起使用

我想将一个文件读入一个字符串。我正在寻找不同的方法来有效地做到这一点。使用固定大小的*char缓冲区我收到了answer来自Tony是什么创建了一个16kb的缓冲区并读入该缓冲区并附加该缓冲区直到没有更多内容可读。我了解它是如何工作的,而且我很快就找到了它。我不明白的是,在该答案的评论中,据说这种方式将所有内容复制了两次。但是据我了解,它只发生在内存中,而不是磁盘中,因此几乎不会引起注意。它从缓冲区复制到内存中的字符串是否有问题?使用istreambuf_iteratorotheranswer我收到了使用istreambuf_iterator的信息。代码看起来很漂亮而且极简,但是速度非

c++ - 无法访问类 'std::basic_ios<_Elem,_Traits>' 中声明的私有(private)成员

这个特定方法有问题,不知道如何解决!我得到的错误是上面的:"errorC2248:'std::basic_ios::basic_ios':cannotaccessprivatememberdeclaredinclass'std::basic_ios'C:\ProgramFiles\MicrosoftVisualStudio10.0\VC\include\ostream604"我的方法是:ostreamoperator在标题中:friendstd::ostreamoperator关于如何解决这个问题的任何想法?我认为这与通过引用而不是值传递有关...但我有点困惑!

c++ - 从 C++ 中的 istream 对象读取时如何检测空行?

如何检测一行是否为空?我有:12345我正在用istreamr阅读这篇文章所以:intn;r>>n我想知道我什么时候到达4和5之间的空间。我尝试读取为char并使用.peek()来检测\n但这检测到\n在数字1之后。上面输入的翻译是:1\n2\n3\n4\n\n5\n如果我是正确的...因为我要操作整数,所以我宁愿将它们读作整数,也不愿使用getline然后转换为整数... 最佳答案 它可能看起来像这样:#include#includeusingnamespacestd;intmain(){istringstreamis("1\n2

c++ - 理解错误 "terminate called after throwing an instance of ' std::length_error' what(): basic_string::_S_create Aborted (core dumped)"

所以这是我的错误:terminatecalledafterthrowinganinstanceof'std::length_error'what():basic_string::_S_createAborted(coredumped)这是我的代码://CoderemovedstringgenerateSong(stringlist[],intnum){//Coderemoved//Coderemovedfor(i=0;i我只想知道该错误的含义,以便我知道如何修复它。我看到很多帖子都有类似的错误,但没有完全相同的。从字面上看,我才刚刚开始使用C++,而这些答案对我目前所学的知识都没有任何

c++ - basic_string::_S_construct null 无效

我正在从命令行读取输入文件。intmain(intargc,char**argv){ScenemyScene;stringfilename=argv[1];myScene=Parser(filename);...}在另一个文件中,我使用了像这样declerated的解析器函数;SceneParser(stringfilename){stringline;ifstreammyfile(filename.c_str());...returnscene;}我收到错误;在抛出“std::logic_error”的实例后终止调用what():basic_string::_S_constructn

windows - COM `IStream` 接口(interface)指针和来自不同线程的访问

任何IStream实现是否有官方COM要求,就IStream的并发访问而言,它应该是线程安全的跨线程通过相同接口(interface)指针的方法?我不是在谈论数据完整性(通常,读/写/查找应该与锁同步)。问题是关于需要使用COM编码器将IStream对象传递给来自不同COM单元的线程。这是一个比我问的关于IStreamasreturnedbyCreateStreamOnHGlobal更普遍的问题,请参阅那里了解更多技术细节。我只是想更好地理解这些东西。已编辑,我在MSDN上找到了此信息:Threadsafety.ThestreamcreatedbySHCreateMemStreamis

windows - 在visual basic中模拟windowskey+L?

我想在VisualBasic中模拟Windows键+L(锁定控制台的快捷方式)并将其绑定(bind)到一个函数。所以当这个函数被调用时它会锁定控制台。我可以这样做吗? 最佳答案 模拟热键是错误的做法。您需要做的就是调用LockWorkStationfunction.这与按Ctrl+Alt+Del并选择“锁定工作站”或使用Win的结果相同>+L热键,除了您可以通过代码以编程方式完成。要从VB应用程序调用此函数,您需要编写一个声明,如下所示:PrivateDeclareFunctionLockWorkStationLib"user32.