2012-04-27 116 views
17

我试图找到一种方法将fout或cout传递给函数。我意识到有逻辑上容易的方法来处理这个问题,比如把ifs放在任何输出数据的函数中,或者甚至只是用两种方式编写函数。但是,这似乎是原始的和低效的。我不相信这个代码会工作,我把它放在这里,以确保很容易看到我喜欢做什么。请注意,我正在使用C++进行算法设计课程,我绝不是经验丰富的C++程序员。我的课程仅限于使用您看到的标题。是否可以将cout或fout传递给函数?

#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
void helloWorld(char); 
ofstream fout; 

int main() 
{ 
    fout.open("coutfout.dat"); 
    helloWorld(c); 
    helloWorld(f); 

    return 0; 
} 
void helloWorld(char x) 
{ 
    xout << "Hello World"; 
    return; 
} 

回答

33

这些都来自ostream继承所以试试这个:

void sayHello(ostream& stream) 
{ 
    stream << "Hello World"; 
    return; 
} 

然后在主要传递对象(cout或其他),它应该工作正常。

+0

它的工作原理!我知道它不可能像我一样努力。谢谢一堆! – ChiefTwoPencils 2012-04-27 19:22:24

+3

没问题。查看http://en.cppreference.com/w/cpp/io/basic_ostream获取基类。 – 2012-04-27 19:38:33

+0

@Kevin在阅读你给出的链接之后,我认为该函数应该返回'stream'作为参数给出......'std :: ostream&sayHello(std :: ostream&stream){return stream <<“Hello World”;} – GingerPlusPlus 2014-10-05 11:32:28

12

是的。让你的功能是

sayhello(std::ostream &os); 

然后,在功能,可以代替xout使用os

(通过一个using std::cout和喜欢的方式,using namespace std转储整个std名字空间,不建议都很好,虽然)。

+0

谢谢。我注意到格式似乎是惯例。那么,使用std :: cout创建一个“快捷方式”可以使用'cout',但让std命名空间的其余部分保持完好? – ChiefTwoPencils 2012-04-27 20:13:34

+0

@RobertoWilko:没错。 '使用std :: cout'将名称'cout'引入到当前名称空间中供即时使用(顺便说一句,如果有的话,你不能再访问名为'cout'的局部变量)。 – thb 2012-04-27 20:45:21

相关问题