Stringstream - 将对象转换为字符串

时间:2012-06-05 21:59:07

标签: c++ stringstream

我有一个复杂的对象,我希望能够使用std::ostringstream运算符传递给<<,就像字符串或int一样。我想给ostringstream提供对象的唯一id(int)和/或名称(string)。是否有我可以在班级中实施的操作员或方法,以使其有效?

1 个答案:

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

请注意,这不会导致成员函数,它只是一次声明和定义友元函数的便捷方式。