我一直在寻找解决方案,但找不到我需要/想要的。
我所想做的就是将一个用于std::cout的流传递给一个函数,该函数对它进行操作
template<typename T>
void printUpdate(T a){
std::cout << "blabla" << a << std::flush;
}
int main( int argc, char** argv ){
std::stringstream str;
str << " hello " << 1 + 4 << " goodbye";
printUpdate<>( str.str() );
return 0;
}
我更喜欢这样的东西:
printUpdate << " hello " << 1 + 4 << " goodbye";
或
std::cout << printUpdate << " hello " << 1 + 4 << " goodbye";
我试着做:
void printUpdate(std::istream& a){
std::cout << "blabla" << a << std::flush;
}
但这给了我:
error: invalid operands of types ‘void(std::istream&) {aka void(std::basic_istream<char>&)}’ and ‘const char [5]’ to binary ‘operator<<’
不能将数据输出到输入流,这不是一件好事。更改:
void printUpdate(std::istream& a){
std::cout << "blabla" << a << std::flush;
}
收件人:
void printUpdate(std::ostream& a){
std::cout << "blabla" << a << std::flush;
}
注意流类型的变化。
编辑1:
此外,您不能将一个流输出到另一个流,至少是std::cout
<< a
的返回值是一个类型ostream
cout
流不喜欢被馈送另一个流。
更改为:
void printUpdate(std::ostream& a)
{
static const std::string text = "blabla";
std::cout << text << std::flush;
a << text << std::flush;
}
编辑2:
您需要将流传递给需要流的函数
不能将字符串传递给需要流的函数
试试这个:
void printUpdate(std::ostream& out, const std::string& text)
{
std::cout << text << std::flush;
out << text << std::flush;
}
int main(void)
{
std::ofstream my_file("test.txt");
printUpdate(my_file, "Apples fall from trees.n");
return 0;
}
链接输出流如果你想把东西链接到输出流,比如函数的结果,函数要么必须返回一个可打印的(可流化的对象),要么必须返回相同的输出流。
示例:
std::ostream& Fred(std::ostream& out, const std::string text)
{
out << "--Fred-- " << text;
return out;
}
int main(void)
{
std::cout << "Hello " << Fred("World!n");
return 0;
}