[英]What's the syntax of following c++ code?
在下面的c ++代碼中, LinkedList<Derived>::
的目的是什么? 我從來沒有看到這種語法。
template<class Derived, class List> LinkedListItem<Derived, List>::~LinkedListItem() {
if(_list) _list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
}
我在詢問之前嘗試搜索,但卻找不到任何東西。 對不起,如果已有帖子。
假設您有兩個班級:
struct A
{
virtual void foo() {std::cout << "Came to A::foo()\n";}
};
struct B : A
{
virtual void foo() {std::cout << "Came to B::foo()\n";}
};
和一個指針:
A* ap = new B();
如果你打電話
ap->foo();
您將執行B::foo()
。 但是,如果要在該指針上執行A::foo()
,可以使用:
ap->A::foo();
來到你發布的代碼,
如果添加一些空格並將內容放在多行中,則相同的代碼為:
template<class Derived, class List>
LinkedListItem<Derived, List>::~LinkedListItem()
{
if(_list)
_list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
}
這條線
template<class Derived, class List>
表示我們正在查看類模板,類模板成員函數或函數模板。
這條線
LinkedListItem<Derived, List>::~LinkedListItem()
表示我們正在查看類模板LinkedListItem
的析構函數。
線條
if(_list)
_list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
表明LinkedListItem
有一個成員變量_list
。 如果成員變量_list
不是NULL,我們就會調用它上面的一些函數。
這條線
_list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
似乎表明_list
的類型有一個名為LinkedList
的基類模板,它有一個名為cut
的成員函數。 該行使用通過將this
轉換為Derived*
獲得的參數來調用該函數。
LinkedList<Derived>
是一種類型,它也是一個scope
。 ::
是作用域操作符,它告訴編譯器它所在的cut(static_cast<Derived*>(this))
范圍cut(static_cast<Derived*>(this))
(LinkedList)。
以下是可能的結構: LinkedList<Derived>
是實現Derived
對象的鏈接列表的模板類。 它由LinkedListItem<Derived, List>
對象組成,它們包圍Derived*
並維護與鏈表相關的其他數據組件(下一個,prev指針,頭指針等)。 每個LinkedListItem<Derived,List>
對象還包含指向它所屬的LinkedList<Derived>
對象的指針。 這是_list
。 因此,當您銷毀LinkedListItem
,您還希望cut
其從原始列表中cut
。 cut
可能會修改要刪除的LinkedListItem
的鄰居的內容,以便維護所有LinkedList
不變量。
LinkedList<Derived>
in _list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
表示函數cut
屬於LinkedList<Derived>
模板,您可以通過范圍運算符注意到::
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.