将未知类传递给C++中的字符串流

问题描述:

我正在使用模板函数,并且正在传递,并且我可能会将各种类的实例发送到字符串流。我可以做些什么来确保它继续工作?将未知类传递给C++中的字符串流

让我更具体一点我在哪里定义这个行为?是否有一些成员应该在每个类被发送到字符串流,我应该在一些增强或扩展现有的字符串流(我正在考虑构建一个继承自sstream的类并且重载运算符以处理所有可能的班)?

我甚至找不到有关这方面的文档,所以即使链接到更多资源也会有所帮助。

这听起来像你想让流插入操作符。一类要能输出到流,定义自由功能:

std::ostream& operator<<(std::ostream& stream, const SomeClassType& x) 
{ 
    stream << x.someData(); 

    return stream; 
} 

因此,如果我们有SomeClassType z;,我们做std::cout << z(或任何其他输出流,像一个fstreamstringstream)编译器会查找并找到我们的函数,然后调用它。也就是,std::cout << z变成operator<<(std::cout, z),在那里你输出你需要的东西。

+0

这正是我需要的 – Sqeaky 2010-03-16 23:51:10

你只需要为这些类别重载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) 
}