我有一个通过重载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
?