在下面的c ++代码中,LinkedList<Derived>::
的目的是什么?我从未见过这种语法。
template<class Derived, class List> LinkedListItem<Derived, List>::~LinkedListItem() {
if(_list) _list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
}
我在询问之前尝试搜索,但却找不到任何东西。很抱歉,如果已有帖子。
答案 0 :(得分:4)
假设您有两个班级:
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*
获得的参数来调用该函数。
答案 1 :(得分:0)
LinkedList<Derived>
是一种类型,它也是scope
。 ::
是作用域操作符,它告诉编译器它所驻留的cut(static_cast<Derived*>(this))
的范围(LinkedList)。
答案 2 :(得分:0)
以下是可能的结构:LinkedList<Derived>
是实现Derived
个对象的链接列表的模板类。它由LinkedListItem<Derived, List>
个对象组成,它围绕Derived*
并保持与链表相关的其他数据组件(下一个,上下指针,头指针等)。每个LinkedListItem<Derived,List>
对象还包含指向它所属的LinkedList<Derived>
对象的指针。这是_list
。因此,当您销毁LinkedListItem
时,您还希望从原始列表中cut
它。 cut
可能会修改要删除的LinkedListItem
的邻居的内容,以便维护所有LinkedList
不变量。
答案 3 :(得分:0)
LinkedList<Derived>
中的 _list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
表示函数cut
属于LinkedList<Derived>
模板,您可以通过范围运算符::
注意到