如何在 class 中使用和访问指向成员值 s_ptm 的静态指针?

How to use and access static pointer-to-member value s_ptm inside class?

我们可以在class中声明和使用实例级指向成员的指针 value/func。 并使用 obj.*(obj.ptm)ptr->*(ptr->ptm) 模式访问。

但是如果将它们声明为静态类型级别s_ptmvalue/func,如何初始化和access/use它们?

class C
{
  public:
     static int s_i;
     static int C::* s_ptm; //declare static ptm value OK here
};

问:如何初始化和访问s_ptm?

coliru.stacked-crooked.com/a/44fa362afb8462ef

指向静态成员的指针只是普通指针。您不能将指向静态成员的指针分配给指向成员的指针。好消息是:你不需要它。指向成员的指针使您能够指向一个成员,然后给定一个实例,您可以通过该指针访问其成员。对于静态成员,这是不需要的,因为所有实例共享同一个静态成员。

要初始化 s_ptm,您首先需要一个 int 成员:

struct C {
    static int s_i;
    static int C::* s_ptm; //declare static ptm value OK here
    int c;
};

int C::* C::s_ptm = &C::c;     // OK
//int C::* C::s_ptm = &C::s_i; // NOPE !
int* p = &C::s_i;              // OK

但是,只有一个 int 成员时,指向 int 类型成员的指针就没那么有用了。您可以通过名称访问它,而不是通过指针访问 C::c 。当同一类型的多个成员或在通用上下文中时,指向成员的指针很有用。