我有一个复杂的对象,我希望能够使用std::ostringstream
运算符传递给<<
,就像字符串或int一样。我想给ostringstream提供对象的唯一id(int)和/或名称(string)。是否有我可以在班级中实施的操作员或方法,以使其有效?
答案 0 :(得分:4)
在与您的类相同的命名空间中定义运算符重载:
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;
}
};
请注意,这不会导致成员函数,它只是一次声明和定义友元函数的便捷方式。