从istream中读取自定义坐标类

时间:2014-05-13 14:20:59

标签: c++ stream

我有一个自定义的Coordinate类,并希望重载运算符>>为了它。 我不确定这样做的正确方法是什么。

坐标的有效流表示是两个以逗号分隔的整数,其间允许有空格(例如“-3,4”或“55,7”或“1,2”。

到目前为止,

代码是:

inline std::istream& operator>> (std::istream& in, Coordinate& c)
{
    Coordinate::coord_type x; // int
    Coordinate::coord_type y;
    in >> x;
    // read comma
    in >> y;
    if (!in.fail())
            c = Coordinate(x, y);

    return in;
}

你怎么读这个分隔符?

1 个答案:

答案 0 :(得分:3)

如何让流选择逗号作为您的格式:

std::istream& comma(std::istream& in)
{
    if ((in >> std::ws).peek() == ',')
        in.ignore();
    else
        in.setstate(std::ios_base::failbit);
    return in;
}

然后你可以在你的数据中读取逗号,如下所示:

in >> x >> comma >> y;