C++ Stringstream-将对象转换为字符串
我有一个复杂的对象,我希望能够通过在与类相同的命名空间中定义运算符重载,将其传递到std::ostringstream:C++ Stringstream-将对象转换为字符串,c++,stringstream,C++,Stringstream,我有一个复杂的对象,我希望能够通过在与类相同的命名空间中定义运算符重载,将其传递到std::ostringstream: template<typename charT, typename traits> std::basic_ostream<charT, traits> & operator<< (std::basic_ostream<charT, traits> &lhs, Your_class const &rhs)
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;
}
};
请注意,这不会产生成员函数,它只是一种方便的方法,可以立即声明和定义友元函数。在与类相同的命名空间中定义运算符重载:
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;
}
};
请注意,这不会产生成员函数,它只是一种方便的方法,可以立即声明和定义友元函数。是,只需在什么上下文中重载唯一id?在运行进程的实例中,您可以使用它的内存地址。它们是类项目的学生对象。每个学生对象都有一个名称、id、地址和电话号码,并且都是从txt文件中生成的。@MartinBeckett-重载@mouseas-用于您的类。每个类都有一个函数,当您请求“Yes”时会调用该函数,只是在什么上下文中重载唯一id?在运行进程的实例中,您可以使用它的内存地址。它们是类项目的学生对象。每个学生对象都有一个名称、id、地址和电话号码,并且都是从txt文件中生成的。@MartinBeckett-重载@mouseas-用于您的类。每个类都有一个函数,当您请求“traits模板参数有一个默认值,因此可以跳过它。”traits模板参数有一个默认值,因此可以跳过它。