Tengo un programa donde necesito crear una clase base que se comparte entre un dll y algún código de aplicación. Luego tengo dos clases derivadas diferentes, una en el DLL en la aplicación principal. Cada uno de estos tiene algunas funciones miembro estáticas que operan en los datos en la clase nase. (Necesitan ser estáticos como se usan como indicadores de función en otro lugar). En su forma más simple, mi problema se muestra a continuación.¿Puedo acceder a un miembro protegido de clases base de una función estática en una clase derivada?
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process(Base *pBase) {
pBase->var = 2;
return true;
}
};
Mi compilador se queja de que no puedo acceder a los miembros protegidos de PBASE a pesar de lo derivado ha protegido el acceso a la base. ¿Hay alguna forma de evitar esto o estoy malinterpretando algo? Puedo hacer que las variables base sean públicas, pero esto sería malo ya que en mi instancia real, estas son un trozo de memoria asignada y los semáforos para protegerlo para multihilo.
¿Ayuda?
posible duplicado de [Acceso a las variables protegidas de los padres] (http://stackoverflow.com/questions/4829518/accessing-parents-protected-variables). Esto no es específicamente sobre si la función es 'estática', sino que se debe a que el parámetro a través del cual se accede al miembro base no es del tipo' Derived'. –
El argumento para la función estática debe ser de la clase base para cumplir con los requisitos de llamada del puntero de función. Tal vez podría evitar esto usando un molde dinámico –
Si puede controlar que la función solo se llame con punteros a objetos 'Base' que son sub-objetos de clase base de objetos 'Derivados' que puede usar' static_cast' para convertir 'Base *' a 'Derived *' en el cuerpo de la función. De lo contrario, tendrías que ser un "amigo" de "Base" o podrías cambiar 'var' para que sea público. Si no puedes hacer nada de esto, entonces estás estancado. –