You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:27:38