我有一个复杂的对象,我希望能够使用std::ostringstream
运算符将其传递给<<
,就像字符串或int一样。我想给ostringstream对象的唯一ID(整数)和/或名称(字符串)。我可以在我的类(class)中实现一个运算符或方法以使其工作吗?
最佳答案
在与您的类相同的 namespace 中定义运算符重载:
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();
}
如果输出函数需要访问类的私有(private)成员,则可以将其定义为 friend 函数:
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;
}
};
请注意,这不会导致成员函数,它只是一次方便地声明和定义一个 friend 函数的简便方法。
关于c++ - Stringstream-将对象转换为字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10905601/