Как использовать и получить доступ к stati c значение указателя на член s_ptm внутри класса? - PullRequest
0 голосов
/ 20 июня 2020

Мы можем объявить и использовать указатель на член на уровне экземпляра значение / веселье c внутри класса. И используя шаблон obj.*(obj.ptm) или ptr->*(ptr->ptm) для доступа.

Но если объявить их как stati c тип s_ptm value / fun c, как инициализировать и получить доступ / использовать их?

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

Q: Как инициализировать и получить доступ к s_ptm?

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

1 Ответ

0 голосов
/ 20 июня 2020

Указатели на члены c stati - это просто указатели. Вы не можете назначить указатель на член stati c указателю на член. Хорошая новость: вам это не нужно. Указатели на члены позволяют вам указать на член, а затем, учитывая экземпляр, вы можете получить доступ к его члену через этот указатель. Для члена stati c это не требуется, потому что все экземпляры используют один и тот же член stati c.

Для инициализации 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 через указатель вы можете получить к нему доступ по его имени. Указатели на элементы полезны, когда существует более одного члена одного типа или в общем c контексте.

...