草庐IT

ostream_joiner

全部标签

c++ - 如何重载不接受或不返回 ostream 的运算符 <<

原始问题我正在编写一个日志记录类,目标是能够做到这一点://threadoneLogger()目前我的Loggerheader看起来像这样:#pragmaonce;#includeclassLogger{public:Logger();~Logger();std::ostream*out_stream;};templateLogger&operator关于这个类的一些说明:跨平台兼容性不是问题。在Logger.cpp内部有一个单例类负责创建“真正的”ostream。Logger构造函数和析构函数执行必要的单例锁定。我有三个问题:如何让operator如何让operator如何添加特化,

c++ - 如何理解函数ostream& operator<< (ostream& os, const unsigned char* s)

对于像这样的函数声明ostream&operator我想知道返回了什么。CPP引用说它返回ostream对象。但为什么它是ostream&而不是简单的ostream?谢谢 最佳答案 运算符返回ostream&(即对ostream对象的可修改引用)而不是拷贝或void的原因是它允许链接,因为实例,以std::cout作为ostream对象的常见示例:unsignedinti=2;std::cout这里我们链接了两个constchar*,一个unsignedint和一个流修饰符,而不必用单独的行将它们分开,这使得阅读和明白了。

c++ - 为什么重载 ostream 的 operator<< 需要引用 "&"?

我一直在学习C++。Fromthispage,我知道可以通过这种方式重载ostream的“ostream&operator和friendostream&operator我的问题是……为什么这个函数需要在ostream和Object的末尾加上“&”?至少我知道“&”是用来...取一个值的地址声明一个类型的引用但是,我认为它们都不适用于上述重载。我花了很多时间在谷歌上搜索和阅读教科书,但找不到答案。任何建议将不胜感激。 最佳答案 whydoesthisfunctionneed"&"attheendofostreamandObject?因

c++ - 使用通用模板函数为 std::ostream 和 std::vector 专门化 operator<< 的最佳方法?

我遇到了标准指定的两阶段查找问题,并且由clang(正确地)实现了与operator的过载有关的问题。对于std::ostream和std::vector.考虑一个非常通用的模板函数,该函数将其参数转换为流(仅在递归时真正有用,但简单的示例足以触发问题)://generic.htemplatevoidshift(Stream&s,Arg&arg){s这个generic.h可以在整个项目中使用。然后在其他文件中,我们要输出std::vector,所以我们定义了一个重载//vector.h#include#includestd::ostream&operatorconst&v){for(a

c++ - 如何设置一个以字符串为键、以 ostream 为值的映射?

我正在尝试使用mapC++中的容器,如下所示:key是string值是类型为ofstream的对象.我的代码如下所示:#include#include#include#includeusingnamespacestd;intmain(){//typedefmapmapType2;//mapfoo;typedefmapmapType;mapfooMap;ofstreamfoo1;ofstreamfoo2;fooMap["file1"]=foo1;fooMap["file2"]=foo2;mapType::iteratoriter=fooMap.begin();coutfirst;}但是,

c++ - 在 ostream 上使用 std::endl 使我的文件成为二进制文件

我正在从事一个使用libzip的项目。我在c++14工作,我围绕libzip编写了一个小包装器,让我的生活更轻松。我有一个std::ostream对象围绕继承std::streambuf的自定义类构建。此streambuf使用libzip函数写入存档中的文件。一切正常,直到我使用std::endl。当我这样做时,输出文件被我所有的文本阅读器读取为二进制文件(仅写入字符串)。我的文本阅读器检测到它是二进制文件,因为在我使用std::endl的地方有一个NUL字节,任何包含NUL字节的文件都被视为二进制文件。所以我的问题是:这正常吗?我有办法使用std::endl吗?我的代码(已提取,因此

c++ - 关于ostream运算符的问题<<

假设我制作了一个类,例如,其中包含一个字符数组。现在,哪个运算符处理这个:myClassinst;cout在“cout 最佳答案 所谓的是std::ostream&operator.如果需要,您可以重载它。 关于c++-关于ostream运算符的问题 https://stackoverflow.com/questions/4036396/

C++ ostream 输出操作

基本上它应该以这种格式列出所有vector坐标:(x,y,z)但目前它确实是这样的(x,y,z,)最简单的方法是在for循环中使用if,但我可以从out变量中减去一小段字符串吗?我的代码:templatestd::ostream&operator&v){out 最佳答案 这是我的旧代码库。从好的方面来说:它带有单元测试:Updatedformoderntimes,moregenericandselfcontainedLiveOnColiru/*!note:delimitercannotcontainNULcharacters*/te

c++ - 如何设置 ostream 的指数字段的宽度?

这段代码:#includeintmain(int,char**argv){std::cout打印1.23e+045当使用MSVisualStudio2003编译时,以及1.23e+45在我的Linux机器上。如何指定指数字段的宽度(以及为什么一开始就不同)? 最佳答案 我认为这对于标准操纵器是不可能的。(如果是这样,我很乐意得到纠正并学习如何纠正)您唯一剩下的选择是自己创建一个streambuf,并拦截进入流的所有指数,手动重新格式化它们,然后将它们传递给底层流。看起来工作量很大,虽然不是火箭科学,但也不是微不足道的任务。关于“为什

c++ - std::ostream 为每一行调用回调

我正在尝试编写一个自定义std::ostream,它为写入的每一行调用一个函数。也就是说,我希望以下代码能够按照注释中的说明工作:my_output_streams([](conststd::string&line){WriteLineToSomeOutput(line);});s请注意,数据不会写入任何地方,也不会存储在任何地方。我唯一需要流存储的是正在聚合的当前行,直到我们遇到行尾。我没有找到任何简单的方法,即使使用boost.Iostreams库也是如此。我可以通过使用STL和Boost的一些内置工具来避免在这里编写自己的行分词器吗?背景my_output_stream类将用于在