- #include <QList>
- #include <QString>
- #include <QFile>
- #include <QDataStream>
- #include <QtDebug>
- #include <stdio.h>
- namespace aaa{
- template <typename T>
- QDataStream& operator<<(QDataStream& s, const QList<T>& l)
- {
- s << quint32(l.size());
- for (int i = 0; i < l.size(); ++i)
- s << l.at(i)<<" ";
- return s;
- }
- }
- void fillAndPrint()
- {
- QList<QString> list;
- list << "foo" << "bar" << "baz";
- // using namespace aaa;
- using aaa::operator<<;
- QFile file1;
- file1.open(stdout,QIODevice::WriteOnly);
- QDataStream out1(&file1);
- out1<<list;
- QFile file("file.out");
- file.open(QIODevice::WriteOnly);
- QDataStream out(&file);
- out<<list;
- QString s;
- foreach( s, list )
- qDebug() << s;
- }
- int main( void )
- {
- qDebug() << "Fill and print";
- fillAndPrint();
- return 0;
- }
大家看看这段代码,刚才看书的时候想到的问题:
我想输出一个qlist中所有的值,不想用foreach( s, list )这中方法,然后查看qlist类,找到
QDataStream & operator<< ( QDataStream & out, const QList<T> & list )方法,
用此方法输出,发现输出的节点间没有分隔符,于是想自己写的operator<<覆盖系统的,经过查看qt4的源码,发现operator<<是个全局函数!这就让我犯了难,经过思考,只能用名字空间来解决这个问题,上面的程序问题已经解决,但是名字空间无法取消,会影响illAndPrint()中的其他operator<<方法!
请问:
1.名字空间能否取消,或者将名字空间中的函数只用于部分代码中?
2.有没有更好的方法实现我上面的功能?替换全局函数