gpt4 book ai didi

c++ - 这种类型的模板参数是什么意思 - `ClassA T::*ELEM` ?

转载 作者:行者123 更新时间:2023-11-30 01:42:01 24 4
gpt4 key购买 nike

<分区>

我最近在侵入式列表的上下文中遇到了这段代码:

template<typename T> struct Node{
T *next;
T *prev;
Node(): next(nullptr), prev(nullptr){}
};


/*
* Intrusive doubly-linked-list
*
* */
template<typename T, Node<T> T::*NODE>
class List{
T *head;
T *tail;
public:
List():head(nullptr), tail(nullptr){}
~List() {clear();}

/*
* Add an element at the head of list
* @param elem item to be inserted
* */
void add_to_front(T *elem){

Node<T> *node = &(elem->*NODE);

assert((node->next) == nullptr);
assert((node->prev) == nullptr);

node->next = head;

if(head != nullptr){
Node<T> *temp = &(head->*NODE);
temp->prev = elem;
}

head = elem;

if(tail == nullptr)
tail = head;

}
//other member functions ,etc.
..
..
};

我在 boost intrusive list library 中看到类似的代码(member_hook<class T, class Hook, Hook T::* PtrToMember>)。

我的问题是关于模板参数 Node<T> T::*NODE .我不是 C++ 专家,但我以前从未遇到过这种特殊语法,也不知道要搜索什么才能理解它。

这是什么意思?它的目的是什么,我应该将其解释为什么 - “NODE 是指向节点的指针,属于 T”?这对我来说没有意义,因为提前不知道 T 包含特定成员,据我所知,::用于解析范围。

另外,如果有人可以澄清 *NODE 的用法在这一行中,例如:Node<T> *node = &(elem->*NODE); ,这将帮助我了解它的用途。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com