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