ExpertiDict

C++ · Avançado · Português · Técnico

ponteiro para membro

põˈtejɾu ˈpaɾa ˈmẽbɾusubstantivo

Ponteiro que identifica um membro de uma classe, declarado como int C::*p, e não um endereço absoluto. Só é usado junto com um objeto, com os operadores .* e ->*.

Onde usar

Aparece em código genérico, como std::invoke, std::mem_fn e projeções de algoritmos, para escolher um campo ou método sem lambda. É raro em código comum, mas útil em bibliotecas.

Em código

struct P {
  int idade;
  int dobro() { return 2 * idade; }
};
int P::* c = &P::idade;
int (P::* m)() = &P::dobro;
P p{20};
int a = p.*c, b = (p.*m)();  // 20, 40

Exemplos

Passei um ponteiro para membro para ordenar por qualquer campo.

Use std::invoke para chamar o ponteiro para membro de forma uniforme.

Cuidado

Não é um endereço de memória: sem o objeto ele não aponta para nada utilizável, e a chamada de método precisa de parênteses extras.

Sinônimos

pointer to member

Veja também

Todos os termos de C++