草庐IT

ostream_joiner

全部标签

c++ - 如何检测类型是否可以流式传输到 std::ostream?

我正在尝试编写类型特征来检测类型是否具有适合用于输出流的重载运算符我遗漏了一些东西,因为对于一个根本没有运算符的简单空类,我总是如此。代码如下:templateclassis_streamable{templatestaticautotest(SS&&s,TT&&t)->decltype(std::forward(s)(t));structdummy_t{};staticdummy_ttest(...);usingreturn_type=decltype(test(std::declval(),std::declval()));public:staticconstboolvalue=!

c++ - 为什么 std::ostream 和 char 之间的 operator<< 函数是非成员函数?

当我运行以下程序时#includeintmain(){charc='a';std::cout我得到了输出a97进一步挖掘http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt,我注意到std::ostream::operator没有具有char的重载作为参数类型。函数调用std::cout.operator解析为std::ostream::operator,它解释了输出。我假设operatorstd::ostream之间的函数和char在别处声明为:std::ostream&operator否则,std::cout

c++ - 为什么 std::ostream 这么慢?

我正在研究一个简单的解析器,在分析时我观察到瓶颈在于...文件读取!我提取了非常简单的测试来比较fstreams和FILE*在读取大量数据时的性能:#include#include#include#include#includevoidmeasure(conststd::string&test,std::functionfunction){autostart_time=std::chrono::high_resolution_clock::now();function();autoduration=std::chrono::duration_cast(std::chrono::high

c++ - 重载运算符<< : cannot bind lvalue to ‘std::basic_ostream<char>&&’

我有一个使用嵌套类的类,并且想使用嵌套类operator定义operator在上层类(Class)。这是我的代码的样子:#include#includetemplatestructclassA{structclassB{templatefriendinlinestd::ostream&operator::classB&b);};classBroot;templatefriendstd::ostream&operator&tree);};templateinlinestd::ostream&operator&tree){outinlinestd::ostream&operator::cl

c++ - C++ 或库中是否有空 std::ostream 实现?

我正在寻找一个类似于/dev/null的std::ostream实现。它只会忽略流向它的任何内容。标准库或Boost中是否存在这样的东西?还是我必须自己动手? 最佳答案 如果您有boost,那么boost/iostreams/device/null.hpp中有一个nullostream和istream实现。要点:#include"boost/iostreams/stream.hpp"#include"boost/iostreams/device/null.hpp"...boost::iostreams::streamnullOstr

c++ - 为什么 std::ostream 不能移动?

显然,流无法复制。应该可以移动流。根据27.9.1.11[ofstream.cons]第4段,可以移动构造一个std::ofstream(对于std::ifstream也是如此,std::fstream和std::*stringstream变体)。例如:#include#include#includestd::ofstreammakeStream(std::stringconst&name){returnstd::ofstream(name);}intmain(){std::ofstreamout{makeStream("example.log")};}尝试移动std::ostream

c++ - 将 ostream 转换为标准字符串

我对C++STL很陌生,所以这可能是微不足道的。我有一个ostream变量,其中包含一些文本。ostream*pout;(*pout)有没有办法提取流并将其存储在char*类型的字符串中? 最佳答案 问题是关于ostream到字符串,不是ostringstream到字符串。对于那些有兴趣回答实际问题的人(特定于ostream),试试这个:voidsomeFunc(std::ostreamout){std::stringstreamss;ss 关于c++-将ostream转换为标准字符串,

c++ - 使用 std::ostream 打印可变参数包的最简单方法是什么?

使用std::ostream打印参数包的最简单方法是什么,以逗号分隔?例子:templatevoiddoPrint(std::ostream&out,Args...args){out注意:可以假设的相应过载运算符适用于所有类型的参数包。 最佳答案 没有你想要的递归调用和逗号。在c++11/c++14通过参数包扩展:templatevoiddoPrint(std::ostream&out,Arg&&arg,Args&&...args){out(arg);usingexpander=int[];(void)expander{0,(voi

c++ - 使用 std::ostream 打印可变参数包的最简单方法是什么?

使用std::ostream打印参数包的最简单方法是什么,以逗号分隔?例子:templatevoiddoPrint(std::ostream&out,Args...args){out注意:可以假设的相应过载运算符适用于所有类型的参数包。 最佳答案 没有你想要的递归调用和逗号。在c++11/c++14通过参数包扩展:templatevoiddoPrint(std::ostream&out,Arg&&arg,Args&&...args){out(arg);usingexpander=int[];(void)expander{0,(voi

c++ - ostream showbase 不显示 "0x"为零值

PSPS:(预先编写好的后置脚本)刚刚想到一个更有先见之明的问题将包括以下概念:对于零值整数,这种不显示“0x”(showbase)是一种标准行为,还是只是我的MinGW实现的一个怪癖?这一切都始于一个愉快的星期天早上...我想以十六进制表示形式转储一些句柄,并以一致的格式化方式。我想要一个领先的0x和一个固定宽度,但事实证明,使用预期的流操纵器这是难以捉摸的。我发现这样做的唯一方法是将句柄转换为无符号长整数。这似乎有点不合理,我希望我不是唯一一个想要这个的人..我在标准十六进制操纵器中遗漏了什么?是因为void*(HANDLE)类型只是在ostream的正常十六进制处理之外定义的吗?