¿Es posible declarar una función miembro de una clase de avance declarada como amigo? Estoy tratando de hacer lo siguiente:declarar un miembro de funciones de una clase prospectivas declarada como amigo
class BigComplicatedClass;
class Storage {
int data_;
public:
int data() { return data_; }
// OK, but provides too broad access:
friend class BigComplicatedClass;
// ERROR "invalid use of incomplete type":
friend void BigComplicatedClass::ModifyStorage();
};
Así que el objetivo es (i) restringir la declaración amigo a un solo método, y (ii) no incluir la definición de la clase complicada para reducir el tiempo de compilación.
Un enfoque podría ser añadir una clase que actúa como intermediario:
// In Storage.h:
class BigComplicatedClass_Helper;
class Storage {
// (...)
friend class BigComplicatedClass_Helper;
};
// In BigComplicatedClass.h:
class BigComplicatedClass_Helper {
static int &AccessData(Storage &storage) { return storage.data_; }
friend void BigComplicatedClass::ModifyStorage();
};
Sin embargo, esto parece un poco torpe ... así que supongo que debe haber una mejor solución!
posible duplicado de [Cómo declarar un amigo que es una función miembro de otra clase no se ha definido aún en C++?] (Http://stackoverflow.com/questions/ 4355660/cómo-a-declarar-un-amigo-que-es-un-miembro de la función de-otra-clas de que aún no es definida) –
Gracias por la referencia - vi que se trate; sin embargo, su respuesta aceptada es el acceso de nivel de clase demasiado amplio que quería evitar ... – hrr