Qt源代码的组织方式

时间:2013-06-21 17:09:44

标签: c++ qt qt4

我正在尝试找到QLinkedList::operator+( const QLinkedList<T> &list )的Qt实现,但我无法理解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使用什么组织?

2 个答案:

答案 0 :(得分:2)

如果不仔细看,实现似乎在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行定义。

因为QLinkedList是一个模板,所以实现完全在标题中是有意义的(实际上,你“不能”[我使用松散的术语]将实现放在C ++文件中)。有关其工作原理的更深入说明,请参阅此问题:Why can templates only be implemented in the header file?

您提及的具体功能QLinkedList::operator+(const QLinkedList<T> &list)在我链接的文件的第511行定义。

答案 1 :(得分:0)

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