ChiefTwoPencils
ChiefTwoPencils

Reputation: 13930

Is it possible to pass cout or fout to a function?

I'm trying to find a way to pass fout or cout to a function. I realize there are logically easy ways to deal with this, like put ifs in any function that outputs data or even just write the function both ways. However, that seems primitive and inefficient. I don't believe this code would ever work, I'm putting it here to ensure it's easy to see what I'd "like" to do. Please be aware that I'm taking a algorithm design class using c++, I'm in no way a seasoned c++ programmer. My class is limited to using the headers you see.

#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;
}

Upvotes: 26

Views: 32761

Answers (2)

thb
thb

Reputation: 14454

Yes. Let your function be

sayhello(std::ostream &os);

Then, in the function, you can use os in place of xout.

(By the way, using namespace std dumps the entire std namespace and is not recommended. A using std::cout and the like is all right, though.)

Upvotes: 13

Kevin Anderson
Kevin Anderson

Reputation: 7010

These both inherit from ostream so try this:

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

Then in main, pass in the object (cout or whatever) and it should work fine.

Upvotes: 45

Related Questions