将未知类传递给C++中的字符串流
问题描述:
我正在使用模板函数,并且正在传递,并且我可能会将各种类的实例发送到字符串流。我可以做些什么来确保它继续工作?将未知类传递给C++中的字符串流
让我更具体一点我在哪里定义这个行为?是否有一些成员应该在每个类被发送到字符串流,我应该在一些增强或扩展现有的字符串流(我正在考虑构建一个继承自sstream的类并且重载运算符以处理所有可能的班)?
我甚至找不到有关这方面的文档,所以即使链接到更多资源也会有所帮助。
答
这听起来像你想让流插入操作符。一类要能输出到流,定义自由功能:
std::ostream& operator<<(std::ostream& stream, const SomeClassType& x)
{
stream << x.someData();
return stream;
}
因此,如果我们有SomeClassType z;
,我们做std::cout << z
(或任何其他输出流,像一个fstream
或stringstream
)编译器会查找并找到我们的函数,然后调用它。也就是,std::cout << z
变成operator<<(std::cout, z)
,在那里你输出你需要的东西。
答
你只需要为这些类别重载operator<<
,例如:
struct Point { int x, y; };
std::ostream& operator<<(std::ostream& os, const Point& p)
{
return os << '(' << p.x << ", " << p.y << ')';
}
那么您可以在您的函数中使用它,这可能是这样的:
template <class T>
std::string to_string(const T& x)
{
std::stringstream ss;
ss << x;
return ss.str();
}
int main()
{
Point p = {1, 2};
std::string ps = to_string(p);
std::cout << ps << std::endl; // (1, 2)
}
这正是我需要的 – Sqeaky 2010-03-16 23:51:10