C++模板参数T* T::*next与T** T::*prev含义解析
关于C++模板中成员指针类型模板参数的解释
你看到的第二个和第三个模板参数是非类型模板参数,具体属于指向类成员的指针类型,下面分别拆解:
T* T::*next:这是一个指向T类中**T*类型非静态成员变量**的指针。模板实例化时,必须传入&T::成员名这样的实参——这个实参就是T类里某个T*类型成员的地址。T** T::*prev:同理,这是指向T类中**T**类型非静态成员变量**的指针,实例化时要传入对应类型成员的地址(比如&T::某个双指针成员)。
结合结构体里的静态函数看用途:
比如next_ptr函数里的el->*next,就是通过成员指针next访问el对象里对应的T*成员,再取该成员的地址返回T**,完美匹配函数的返回值类型。
举个实际实例化的例子:
假设我们定义了一个链表节点类:
struct Node { Node* next_node; Node** prev_node; };
那么适配器的实例化写法就是:
using NodeListAdapter = I_P_List_adapter<Node, &Node::next_node, &Node::prev_node>;
之后调用NodeListAdapter::next_ptr(some_node),就能拿到some_node->next_node的地址,也就是Node**类型的指针。
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

