2012-06-05 3 views
1

У меня есть сложный объект, который я хочу передать в std::ostringstream с оператором <<, как строка или int. Я хочу дать ostringstream уникальный идентификатор объекта (int) и/или имя (строка). Есть ли в моем классе оператор или метод, позволяющий этому работать?Stringstream - преобразовать объект в строку

+5

Да, просто перегрузите << оператор - см. Http://stackoverflow.com/questions/4421706/operator-overloading –

+1

уникальный идентификатор в каком контексте? В случае выполнения процесса вы можете использовать его адрес памяти. – Ivarpoiss

+0

Это объекты «Студенты» для проекта класса. Каждый объект Student имеет имя, идентификатор, адрес и номер телефона и построен из txt-файла. –

ответ

3

Определение перегрузки оператора в том же пространстве имен вашего класса:

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(); 
} 

Если функция вывода необходим доступ к закрытым членам своего класса, то вы можете определить его как друга функции:

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

Обратите внимание, что это не приводит к членной функции, это просто удобный способ объявить и определить функцию друга сразу.

+0

Параметр шаблона 'traits' имеет значение по умолчанию, поэтому его можно пропустить. – AlwaysLearning

Смежные вопросы