У меня есть случай, когда я не смог найти правильного решения. Мне нужно иметь базовый класс шаблона и класс менеджера, который выполняет некоторую работу с этим базовым классом. Вот код
class Base;
class Manager
{
public:
void DoSomethingTo(Base * bclass)
{
if(bclass->PrivateVar == 0)
// Some code
}
}
class Base
{
protected:
int PrivateVar;
friend class Manager;
};
template<class T>
class TempBase : public Base
{
private:
Manager * man;
public:
void DoWork()
{
PrivateVar = 0;
man->DoSomethingTo(this);
}
}
Моя проблема в том, что переменная PrivateVar на самом деле должна быть закрытой для TempBase и не быть доступной для классов, производных от TempBase, но, поскольку я не могу передать ее указатель на Manager::DoSomethingTo()
, я должен извлечь ее из базового класса, а базовый класс PrivateVar. И поскольку я использую PrivateVar в TempBase, он не может быть закрытым для Base, что делает его доступным из дочерних классов TempBase.
Как мне написать класс TempBase, чтобы PrivateVar был закрытым членом, тогда как он может быть достигнут с Manager::DoSomethingTo()
?
Спасибо