在C ++中检查有效的istream重载

时间:2019-04-22 12:03:32

标签: c++

我有一个通过重载istream来读取不同格式的行的类:

istream& operator>>(istream& is, Duration &d) {
    char c1, c2;
    int hours, mins, secs;

    if (is >> hours >> c1 >> mins >> c2 >> secs) {
        if (c1 == c2 && c2 == ':') {
            d = Duration(hours, mins, secs);
        }
        else {
            is.clear(ios_base::failbit);
        }
    }
    return is;
}

例如,如果格式不是有效的Duration,则以上内容将引发错误:

hours:mins:secs

但是,例如,如果我要验证Track的行,其格式为:

hours:mins:secs - title

我认为我可以做到

char c3;
Duration trackDur;
string trackTitle;

if(is >> trackDur >> c3 >> trackTitle)

但是,如果trackTitle的长度超过一个单词,它将切断其余单词。所以:

1)if(is >> trackDur >> c3 >> trackTitle)有效,因为{{1}中的trackDur超载,istream将占用整个持续时间(与单词数量无关) }?

2)如果Duration多于一个单词,如何使支票包括trackTitle

0 个答案:

没有答案