Ho un programma in cui ho bisogno di fare una classe base che è condivisa tra una DLL e qualche codice di applicazione. Quindi ho due diverse classi derivate, una in dll nell'applicazione principale. Ognuno di questi ha alcune funzioni membro statiche che operano sui dati nella classe nase. (Devono essere statici come sono usati come puntatori di funzioni altrove). Nella sua forma più semplice il mio problema è mostrato sotto.Posso accedere a membri di classi di base protette da una funzione statica in una classe derivata?
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process(Base *pBase) {
pBase->var = 2;
return true;
}
};
mio compilatore si lamenta che non posso accedere ai membri protetti di Pbase anche se derivato, ha protetto l'accesso alla Base. C'è un modo per aggirare questo o sto fraintendendo qualcosa? Riesco a rendere pubbliche le variabili di Base, ma questo sarebbe un problema, dato che in realtà sono un ammasso di memoria allocata e i semafori per proteggerlo per il multithreading.
Aiuto?
possibile duplicato del [Accesso variabili protette del genitore] (http://stackoverflow.com/questions/4829518/accessing-parents-protected-variables). Questo non riguarda specificamente se la funzione è 'statica', ma perché il parametro attraverso il quale si accede al membro di base non è di tipo" Derivato ". –
L'argomento della funzione statica deve essere della classe base per essere conforme ai requisiti di chiamata del puntatore della funzione. Forse potrei aggirare questo usando un cast dinamico –
Se puoi controllare che la funzione sia chiamata solo con i puntatori agli oggetti 'Base' che sono sotto-oggetti di classe base degli oggetti' Derivati' che puoi usare 'static_cast' per convertire da 'Base *' a 'Derivato *' nel corpo della funzione. Altrimenti dovresti essere un 'amico' di' Base' o potresti cambiare 'var' come pubblico. Se non puoi fare nessuno di questi, allora sei bloccato. –