C++ · Avançado · Português · Técnico
ponteiro para membro
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, 40Exemplos
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