Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用ostream打印到任何地方_C++_Printing_Stream - Fatal编程技术网

C++ 用ostream打印到任何地方

C++ 用ostream打印到任何地方,c++,printing,stream,C++,Printing,Stream,我不想将数据发送到任何地方,我的意思是我不想在控制台或文件中打印数据,但我需要一些std::ostream对象。怎么做?我用过: std::ostream bitBucket(0); 最近没有问题,但如果你从某个角度看它,它被标记为有一些潜在的问题(见下面的链接) 放在一边:据我所知(我并不完全确定),上面的调用最终会调用basic_ios::init(0),因为传入的是空指针,所以它将rdstate()函数返回的流状态设置为badbit值 这反过来会阻止流输出更多的信息,而不是将其丢弃 下面

我不想将数据发送到任何地方,我的意思是我不想在控制台或文件中打印数据,但我需要一些
std::ostream
对象。怎么做?

我用过:

std::ostream bitBucket(0);
最近没有问题,但如果你从某个角度看它,它被标记为有一些潜在的问题(见下面的链接)

放在一边:据我所知(我并不完全确定),上面的调用最终会调用
basic_ios::init(0)
,因为传入的是空指针,所以它将
rdstate()
函数返回的流状态设置为
badbit

这反过来会阻止流输出更多的信息,而不是将其丢弃

下面的程序显示了它的作用:

#include <iostream>

int main (void) {
    std::ostream bitBucket(0);
    bitBucket << "Hello, there!" << std::endl;
    return 0;
}
#包括
内部主(空){
std::ostream比特桶(0);
bitBucket这里有一些建议

那是一个很好的答案

使用普通std::fstream,仅在写入所需文件时打开它 “/dev/null”。它应该可以工作

如果您真的想创建自己的流,只需从
简单地定义你自己的操作符最简单的解决方案就是输出到一个未打开的
std::ofstream
(或处于错误状态的任何其他输出流)。这将导致 流永久处于错误状态。这可能是一个优势
最简单的解决方案:使用
std::stringstream

#include <sstream>
#include <iostream>

void func(std::ostream& o){
    o << "blatest\n";
}

int main(){
    std::stringstream black_hole;
    func(std::cout);
    func(black_hole);
}
#包括
#包括
无效函数(标准::ostream&o){

o因为没有人提到它,如果是关于抑制std或错误输出,您可以简单地关闭相应的文件描述符(例如
fclose(stdout)
fclose(stderr)
)。
这将关闭所有内容,包括
printf
fprintf(stderr,…)


因此,您确实将继续使用通常的
cout
cerr
,但它们将被转换为位桶。

在构造函数中给出0是什么意思?它(显然,因为我不完全确定内部工作)将流状态设置为bad(通过使用空指针调用
init
),我相信它不会再尝试发送更多的数据,而只是将其扔掉。请恕我直言。我很确定这是一个重复,但无法在atm上搜索,因为我在iPhone上。除了stringstream仍然会分配内存,如果输出很大,这可能是一个问题。
#include <streambuf>
#include <ostream>

template <class cT, class traits = std::char_traits<cT> >
class basic_nullbuf: public std::basic_streambuf<cT, traits> {
typename traits::int_type overflow(typename traits::int_type c)
{
return traits::not_eof(c); // indicate success
}
};

template <class cT, class traits = std::char_traits<cT> >
class basic_onullstream: public std::basic_ostream<cT, traits> {
public:
basic_onullstream():
std::basic_ios<cT, traits>(&m_sbuf),
std::basic_ostream<cT, traits>(&m_sbuf)
{
init(&m_sbuf);
}

private:
basic_nullbuf<cT, traits> m_sbuf;
};

typedef basic_onullstream<char> onullstream;
typedef basic_onullstream<wchar_t> wonullstream;
class NulStreambuf : public std::streambuf
{
    char                dummyBuffer[64];
protected:
    virtual int         overflow( int c )
    {
        setp( dummyBuffer, dummyBuffer + sizeof( dummyBuffer ) ) ;
        return (c == EOF) ? '\0' : c ;
    }
};
class NulOStream : public NulStreambuf, public std::ostream
{
public:
    NulOStream() : std::ostream( this ) {}
};
#include <sstream>
#include <iostream>

void func(std::ostream& o){
    o << "blatest\n";
}

int main(){
    std::stringstream black_hole;
    func(std::cout);
    func(black_hole);
}