[英]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.