没有开箱即用的运算>>
符。QTextStream
bool
医生。QTextStream提到了很多输入运算符,但没有提到bool
:
QTextStream & operator>>(QChar &c)
QTextStream & operator>>(char &c)
QTextStream & operator>>(short &i)
QTextStream & operator>>(unsigned short &i)
QTextStream & operator>>(int &i)
QTextStream & operator> >(unsigned int &i)
QTextStream & operator>>(long &i)
QTextStream & operator>>(unsigned long &i)
QTextStream & operator>>(qlonglong &i)
QTextStream & operator>>(qulonglong &i)
QTextStream & operator>>(float &f)
QTextStream & 运算符>>(double &f)
QTextStream & 运算符>>(QString &str)
QTextStream & operator>>(QByteArray &array)
QTextStream & operator>>(char *c)
但是,为了个人的快乐添加一个并不复杂。
对此最复杂的是@Frank Osterfeldtrue
在此评论中已经提到的 - 定义and的适当文本表示false
。
对于我的 MCVE,我简单地使用了0
和1
.
testQTextStreamInputBool.cc
:
#include <QDebug>
#include <QTextStream>
// a stream input operator for bool
QTextStream& operator>>(QTextStream &in, bool &var)
{
char value;
in >> value;
var = value == '1';
return in;
}
int main()
{
QTextStream in(stdin);
while (!in.atEnd()) {
bool value; in >> value;
qDebug() << "Read:" << (value ? "true" : "false");
}
}
testQTextStreamInputBool.pro
:
SOURCES = testQTextStreamInputBool.cc
QT = core
bash
在cygwin64中编译和测试:
$ qmake-qt5 testQTextStreamInputBool.pro
$ make
g++ -c -fno-keep-inline-dllexport -D_GNU_SOURCE -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_CORE_LIB -I. -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -I. -I/usr/lib/qt5/mkspecs/cygwin-g++ -o testQTextStreamInputBool.o testQTextStreamInputBool.cc
g++ -o testQTextStreamInputBool.exe testQTextStreamInputBool.o -lQt5Core -lpthread
$ echo "0110010" | ./testQTextStreamInputBool
Read: false
Read: true
Read: true
Read: false
Read: false
Read: true
Read: false
$
当然,重载operator<<(QTextStream&, bool)
以及为自定义输入提供匹配的自定义输出也是有意义的。
如果不是,编译器将隐式转换bool
为int
,并使用QTextStream::operator<<(int)
。因此,false
将写为0
,true
为1
。
这正是我重载的布尔流输入运算符所期望的......