gpt4 book ai didi

C++ - 将一个 ostream 中的数据发送到另一个 ostream

转载 作者:行者123 更新时间:2023-11-30 01:19:28 24 4
gpt4 key购买 nike

我不明白这个 ostream 函数声明是什么意思:

ostream& operator<< (ostream& (*pf)(ostream&));

(特别是 (*pf)(ostream&) 部分)。我想做类似的事情:

void print(ostream& os){
cout << os;
}

但是我得到了错误:

 Invalid operands to binary expression ('ostream' . . . and 'ostream')

最佳答案

I don't understand what this ostream function declaration means:

ostream& operator<< (ostream& (*pf)(ostream&));

你见过像std::endl这样的函数吗? , std::flush , std::hex , std::dec , std::setw ……?它们都可以使用“<<”“发送”到流,然后将流作为函数参数调用它们,并在流上施展魔法。他们实际上匹配 ostream& (*pf)(ostream&)上面的参数,并且该运算符是允许使用它们的运算符。如果我们看一下 Visual C++ 实现...

 _Myt& operator<<(_Myt& (__cdecl *_Pfn)(_Myt&))
{
return ((*_Pfn)(*this));
}

...您可以看到是否只是调用该函数,将它所使用的流作为参数传递。这些函数应返回对同一流参数的引用,以便进一步 <<操作可能被链接起来,或者流可能被隐式转换为 bool作为流状态的测试。

参见 http://en.cppreference.com/w/cpp/io/manip有关 io 操纵器的更多信息。

你需要帮助:

void print(ostream& os){
cout << os;
}

这里的问题是您要发送 ostream另一个流的参数 - cout - 而且它不知道您要用它做什么。

发送os的当前内容cout , 尝试:

void print(ostream& os){
cout << os.rdbuf();
}

或者,如果您想将一些实际数据打印到参数表示的流中:

void print(ostream& os){
os << "show this!\n";
}

print(std::cout); // to write "show this!\n" to `std::cout`
print(std::cerr); // to write "show this!\n" to `std::cerr`

关于C++ - 将一个 ostream 中的数据发送到另一个 ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20850065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com