2

I have a complex object that I want to be able to pass into a std::ostringstream with the << operator just like a string or int. I want to give the ostringstream the object's unique id (int) and/or name (string). Is there an operator or method I can implement in my class to allow this to work?

6
  • 5
    Yes just overload the << operator - see stackoverflow.com/questions/4421706/operator-overloading Commented Jun 5, 2012 at 22:01
  • 1
    unique id in what context? In an instance of running process you could use it's memory address. Commented Jun 5, 2012 at 22:02
  • They are "Student" objects, for a class project. Each Student object has a name, id, address, and phone number, and are built from a txt file. Commented Jun 5, 2012 at 22:09
  • @MartinBeckett - overload << for my class, or for ostringstream? Commented Jun 5, 2012 at 22:10
  • @mouseas - for your class. Each class simply has a function that is called when you ask for '<<' which prints the values. It's just that for int/float/double etc they are built-in Commented Jun 5, 2012 at 22:11

1 Answer 1

4

Define an operator overload in the same namespace as your class:

template<typename charT, typename traits> std::basic_ostream<charT, traits> & operator<< (std::basic_ostream<charT, traits> &lhs, Your_class const &rhs) { return lhs << rhs.id() << ' ' << rhs.name(); } 

If the output function needs access to private members of your class then you can define it as a friend function:

class Your_class { int id; string name; template<typename charT, typename traits> friend std::basic_ostream<charT, traits> & operator<< (std::basic_ostream<charT, traits> &lhs, Your_class const &rhs) { return lhs << rhs.id << ' ' << rhs.name; } }; 

Note that this does not result in a member function, it's just a convenient way to declare and define a friend function at once.

Sign up to request clarification or add additional context in comments.

1 Comment

The traits template parameter has a default value, so it can be skipped.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.