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

时间:2014-06-26 20:39:51

标签: c++

在下面的c ++代码中,LinkedList<Derived>::的目的是什么?我从未见过这种语法。

template<class Derived, class List> LinkedListItem<Derived, List>::~LinkedListItem() {
    if(_list) _list->LinkedList<Derived>::cut(static_cast<Derived*>(this));
}

我在询问之前尝试搜索,但却找不到任何东西。很抱歉,如果已有帖子。

4 个答案:

答案 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>模板,您可以通过范围运算符::注意到