Cześć!
Strumienie w Qt są bardzo fajne, lecz brakuje im tego jednego bardzo ułatwiającego życie operatora który występuje w strumieniach z std
while(stream >> value){
}
Tym operatorem jest bool
który powoduje że pętelka się kręci, dopóki nie pojawi się błąd w odczycie.
Powiem Wam, że w Qt kombinuję, wymyślam, może by dziedziczyć, jakoś dopisać operator, po chwili zastanowienia zapisałem to tak:
#include <QDebug>
#include <QDataStream>
int main(){
char a[] = {1, 2, 3, 2, 1};
QDataStream stream(a);
quint8 v;
while((stream >> v).status() == QDataStream::Ok){
qDebug() << v;
}
return 0;
}
Jest ok, lecz zapis jest droszkę długi i doprowadza mnie do tego:
#include <QDebug>
#include <QDataStream>
#define STREAM_WHILE(...) while((__VA_ARGS__).status() == QDataStream::Ok)
int main(){
char a[] = {1, 2, 3, 2, 1};
QDataStream stream(a);
quint8 v;
STREAM_WHILE(stream >> v){
qDebug() << v;
}
return 0;
}
A powyższy define
doprowadza do szaleństwa... zamiast lepiej jest gorzej.
Staram się troszkę zwiększyć czytelność i zmniejszyć ilość kodu w jednym ze starszych moich projektów.
Mam coś takiego:
for(;;){
stream >> ev;
if(stream.status() != QDataStream::Ok || ev.endOfTrack())
break;
mEvent.append(ev);
}
A wolałbym tak:
while( (stream >> ev) && !ev.endOfTrack() )
mEvent.append(ev);
Proszę doradźcie coś, bo z brakiem operatora bool, to tak kombinuję że same kwiatki wychodzą :(