我有一个复杂的对象,我希望能够使用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/

10-09 02:36