成员指针

类型

形如 Member Class::* 的类型是成员指针类型

可以理解为,Class::* 是一种特别的与 Class 有关的 * (指针),而这个指针的指向类型是 Member

编译期特性

∵一般 class/struct 都是静态类型 ∴成员偏移量编译期可知 ∴

  • 成员指针取地址可以编译期执行
  • 成员指针可作为模板参数

解引用

成员指针的解引用运算符是 operator ->* 或者 operator .*

例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct Student {
    std::string name;
    int         age;
};

template<std::string Student::* S>
struct MStu {
    Student student;

    auto foo() const -> void { std::cout << student.*S; }
};

  

int main() {
    auto m = MStu<&Student::name> {
        Student {
             .name = "DvdBr3o",
             .age  = 18,
        }
    };
    m.foo(); // prints "DvdBr3o"
}
最后更新于 Jun 28, 2025 18:10 +0800