草庐IT

basic_streambuf

全部标签

c++ - 从 streambuf 派生而不重写相应的流

几天前,我决定编写一个使用mmap和预读的streambuf子类会很有趣。我查看了我的STL(SGI)如何实现filebuf并意识到basic_filebuf包含一个FILE*。所以从basic_filebuf继承是不可能的。所以我继承自basic_streambuf。然后我想将我的mmapbuf绑定(bind)到一个fstream。我认为我唯一要做的就是复制filebuf的隐式接口(interface)...但这是一个明显的错误。在SGI中,basic_fstream拥有一个basic_filebuf。无论我是否调用basic_filestream.std:::::ios::rdbu

c++ - 如何从 C++ std::basic_ostream 派生并使 << 运算符虚拟?

我正在编写一个具有各种消息输出的类。我想让这个类通用并且独立于平台,所以我正在考虑将basic_ostream引用传递给它,它可以将所有消息转储到流中。通过这样做,如果类在控制台程序中使用,我可以将std::cout传递给它并显示在控制台窗口中。或者我可以将派生的ostream传递给它,并将消息重定向到某些UI组件,例如列表框?唯一的问题是数据插入器operator不是虚函数。如果我将派生类引用传递给它,则只会调用basic_ostream有解决办法吗? 最佳答案 NanZhang自己的回答,最初作为问题的一部分发布:跟进:好的,这

c++ - 检测 basic_string 实例化

我写了下面的代码来确定一个类型是否是std::basic_string的实例化:templatestructis_string{enum{value=false};};templatestructis_string>{enum{value=true};};有没有更简洁的方法来实现它? 最佳答案 好吧,我找到了一个稍微短一点的方法:#includetemplatestructis_string:std::false_type{};templatestructis_string>:std::true_type{};但也许其他人可以做得更

c++ - 如何通过自定义的 streambuf 设置流的 badbit

我有一个自定义的std::streambuf。像这样的东西:classmybuf:publicstd::streambuf{...virtualstd::streambuf::int_typeunderflow(){if(eof){returntraits_type::eof();}...}...std::istreamstream(newmybuf(...));通过在underflow()函数上返回eof来设置流的eof标志。如何设置流的badbit标志?overflow()函数应该抛出异常吗? 最佳答案 抛出异常确实是可行的方法

c++ - 在 VC++14 中使用 std::basic_stringstream<char16_t> 时出错

我正在尝试做一些基本的char16_t字符串(u16string)处理,但遇到了一些麻烦。这个小程序:#include#includeintmain(){intfoo=65;std::basic_stringstreamss;ss创建错误:ErrorC2491'std::numpunct::id':definitionofdllimportstaticdatamembernotallowed.xlocnum259我已经在一些在线编译器上试过了,但是那里没有错误。感谢我能得到的任何帮助! 最佳答案 好的,它看起来像是VC++标准库或V

c++ - 我对 N4140 中 [basic.link]/7 的理解是否正确?

VS2015编译并执行以下代码片段没有问题。g++和clang没有链接代码,我认为它们是正确的。#includenamespaceX{voidp(){voidq();//Thisisablockscopedeclarationofthefunctionq()withexternal//linkage(by§3.5/6),whichthenmustbedefinedinnamespaceX,//accordingto§3.5/7,andnotintheglobalnamespace.q();}}voidq(){std::cout 最佳答案

c++ - [basic.lookup.unqual]/3 中的第一个示例

[basic.lookup.unqual]/3中的第一个示例:inth;voidg();namespaceN{structA{};templateintf(T);templateintg(T);templateinth(T);}intx=f(N::A());//OK:lookupofffindsnothing,ftreatedastemplatenameinty=g(N::A());//OK:lookupofgfindsafunction,gtreatedastemplatenameintz=h(N::A());//error:h上面的评论似乎表明编译器应该以不同的方式对待上面的名称g

c++ - C++ streambuf 方法可以抛出异常吗?

我正在尝试找到一种方法来获取读取或写入流的字符数,即使出现错误并且读/写结束很短也是可靠的。我正在做这样的事情:returnstream.rdbuf()->sputn(buffer,buffer_size);但是如果允许overflow的streambuf实现抛出异常,这将不起作用。是吗?我无法在任何地方找到它的记录。 最佳答案 basic_streambuf::overflow允许在失败时抛出异常,如27.6.3.4.5/6中所述,遗憾的是没有办法确保编译时该函数永远不会抛出异常。看来您的运气已经不多了,要100%确定overfl

c++ - 双击 ActiveX 控件时如何禁用 Visual Basic 对话框

我开发了一个自定义的ActiveX控件:ax_love。当我将它插入到ppt里面并双击这个控件时,会弹出一个VisualBasic窗口,这是NotAcceptable。我希望双击操作会触发我自己的功能。ps:我用的是vs2017的atl/com 最佳答案 在设计模式下,单击ActiveX控件将打开VB窗口-这符合预期。在演示模式下,单击ActiveX控件将触发您的功能。如果您希望此文件的某个版本仅在演示模式下打开(这样用户就不会被带到VB页面),请将文件另存为PowerPoint宏启用显示(.ppsm)。然后它始终以演示模式打开(保

c++ - 如何将 boost::asio::streambuf 转换为 std::string?

这个问题在这里已经有了答案:Copyastreambuf'scontentstoastring(11个答案)关闭7年前。我想将boost::asio::streambuf转换为std::string。如何轻松做到这一点?