I would like to have, in a base class A, a reference (or pointer if not possible) to a pointer in a derived class. This would look like this :
BaseClassController
{
public :
//Constructors, destructor,...
protected :
BaseDataClass *& m_current;
}
DerivedClassAController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassA * m_currentA;
}
DerivedClassBController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassB * m_currentB;
}
with the Data classes being :
BaseDataClass
{
void doSomething();
}
DerivedDataClassA : public BaseDataClass
{
//...
}
DerivedDataClassB : public BaseDataClass
{
//...
}
What I would like to do next in BaseClassController is :
BaseClassController::someFunction(){
m_current->doSomething();
}
The problem is that the objects pointed by m_currentA and m_currentB will change a lot through the life of the program, and I would like the m_current reference to change automatically when the derived class pointer changes. Concretly, I would like the function changing the object pointed by m_currentA to look like this :
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
}
and not like this :
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
m_current = ptA;
}
I tried by passing the pointer in the derived class constructor :
BaseClassController::BaseClassController(BaseDataClass* pt)
: m_current(pt)
{
}
DerivedClassAController::DerivedClassAController()
: BaseClassController(m_currentA),
m_current(A)
{
}
But I ended up having a m_current pointing to a DerivedDataClassB in DerivedClassAController.
Is this acheivable ? Or is there a better way to do that ?
Note : DerivedClassAController will use m_currentA as a DerivedDataClassA 95% of the time. Using only the m_current pointer in the base class will end putting dynamic_cast(m_current) everywhere.
Aucun commentaire:
Enregistrer un commentaire