繁体   English   中英

以下c ++代码的语法是什么?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM