Qt源代码是如何组织的

How the Qt source code is organized

本文关键字:何组织 源代码 Qt      更新时间:2023-10-16

我正试图找到QLinkedList::operator+( const QLinkedList<T> &list )的Qt实现,但我无法理解Qt源代码。这是问题4.8.4的一部分:

我在.h:中找到了申报单

QLinkedList<T> operator+(const QLinkedList<T> &l) const;

但在.cpp中,我看到的只是:

/*! fn QLinkedList<T> QLinkedList::operator+(const QLinkedList<T> &other) const
    Returns a list that contains all the items in this list followed
    by all the items in the a other list.
    sa operator+=()
*/

定义在哪里?Qt使用的组织是什么?

如果不仔细观察,实现似乎在src/corelib/tools/qlinkedlist.h中(您可以在此处查看此文件:http://qt.gitorious.org/qt/qt/blobs/4.8/src/corelib/tools/qlinkedlist.h)。

特别是,大多数函数都定义在文件顶部附近的一行或两行中(我链接的文件中的第78行至第255行)。它们使用一些较长的函数来完成工作(其中相当一部分不能通过公共Qt API访问),这些函数定义在我链接的文件中的第258到516行。

Beause QLinkedList是一个模板,实现完全在头中是有意义的(事实上,你"不能"[我用这个词松散地]把实现放在C++文件中)。要更深入地解释这是如何工作的,请参阅以下问题:为什么模板只能在头文件中实现?。

您提到的特定函数QLinkedList::operator+(const QLinkedList<T> &list)定义在我链接的文件的第511行。

QLinkedList<T>::operator+(const QLinkedList<T>& l)的定义也在底部的qlinkedlist.h内部。

这就是定义:

template <typename T>
QLinkedList<T> QLinkedList<T>::operator+(const QLinkedList<T> &l) const
{
    QLinkedList<T> n = *this;
    n += l;
    return n;
}

来源:http://qt.gitorious.org/qt/qt/blobs/v4.8.4/src/corelib/tools/qlinkedlist.h