У меня есть программа, в которой мне нужно создать базовый класс, который разделяется между dll и некоторым кодом приложения. Затем у меня есть два разных производных класса, один в dll в основном приложении. У каждого из них есть несколько статических функций-членов, которые работают с данными в классе nase. (Они должны быть статическими, поскольку используются как указатели на функции в другом месте). В простейшей форме моя проблема показана ниже.
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process( Base *pBase ) {
pBase->var = 2;
return true;
}
};
Мой компилятор жалуется, что я не могу получить доступ к защищенным членам pBase, хотя Derived имеет защищенный доступ к Base. Есть ли способ обойти это или я что-то не понимаю? Я могу сделать базовые переменные общедоступными, но это было бы плохо, поскольку в моем реальном экземпляре это кусок выделенной памяти и семафоры для защиты ее от многопоточности.
Помощь?
static
, но потому, что параметр, через который осуществляется доступ к базовому члену, не относится к типуDerived
. - person CB Bailey   schedule 05.09.2011Base
объекты, которые являются подобъектами базового классаDerived
объектов, вы можете использоватьstatic_cast
для преобразования изBase*
вDerived*
в теле функции. В противном случае вам пришлось бы бытьfriend
изBase
, иначе вы могли бы сделатьvar
общедоступным. Если вы не можете сделать ничего из этого, вы застряли. - person CB Bailey   schedule 05.09.2011