如何在类内部使用和访问静态指针到成员值s_ptm?

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

本文关键字:成员 指针 ptm 静态 访问 内部      更新时间:2023-10-16

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

但是,如果将它们声明为静态类型级s_ptm值/func,如何初始化和访问/使用它们?

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。当存在多个相同类型的成员或在泛型上下文中时,指向成员的指针非常有用。