Es un puntero, así que intente:
a->f();
Básicamente, el operador .
(utilizado para acceder a los campos y métodos de un objeto) se utiliza en objetos y referencias, por lo que:
A a;
a.f();
A& ref = a;
ref.f();
Si tiene un tipo de puntero, primero debe eliminar la referencia para obtener una referencia:
A* ptr = new A();
(*ptr).f();
ptr->f();
La a->b
notación suele ser una abreviatura de (*a).b
.
Una nota sobre los punteros inteligentes
El operator->
puede estar sobrecargado, lo que es utilizado principalmente por punteros inteligentes. Cuando usa punteros inteligentes , también usa ->
para referirse al objeto puntiagudo:
auto ptr = make_unique<A>();
ptr->f();