2

我有一个复杂的对象,我希望它能够像字符串或 int 一样std::ostringstream使用运算符传递给 a。<<我想为 ostringstream 提供对象的唯一 ID(int)和/或名称(字符串)。我可以在我的类中实现一个运算符或方法来允许它工作吗?

4

1 回答 1

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

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

于 2012-06-05T23:29:49.740 回答