我正在尝试找到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使用什么组织?
答案 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