Добрый день. есть проблема. MFC советуют использовать вложение вместо наследования при реализации интерфейсов описанных в структурах, но как быть если внутри библиотеки необходимо добраться до члена класса за интерфейсом. Вот код:
struct ICar : public IUnknown
{
virtual bool Move() = 0;
};
class CCar
{
public:
class XCar : public ICar
{
public:
//
virtual HRESULT __stdcall QueryInterface (const GUID &IID, void **ppv);
virtual ULONG __stdcall AddRef (void);
virtual ULONG __stdcall Release (void);
//
virtual bool Move();
} m_xCar;
friend class m_xRide ;
const CArmchair& getArmchair();
private:
CArmchair *m_pArmchair;
};
struct IPeopleInCar : public IUnknown
{
virtual bool SeatToCard(const ICar&) = 0;
};
class CPeople
{
public:
class XPeopleInCar : IPeopleInCar
{
//
virtual HRESULT __stdcall QueryInterface (const GUID &IID, void **ppv);
virtual ULONG __stdcall AddRef (void);
virtual ULONG __stdcall Release (void);
//
virtual bool SeatToCard (const ICar&);
} m_xPeopleInCar;
friend class XPeopleInCar;
private:
CPeople *m_pPeople;
CArmchair *m_pArmchair;
};
В данном случае пользователю библиотеки совершенно не хочеться знать что у человека жолжен быть внутри описано свойство КРЕСЛО, пользователь хочет лишь посадить человека в машину в которой он уже знает что есть за кресла...
КАК ДОБРАТЬСЯ ИЗ
virtual bool SeatToCard (const ICar&);
до
CArmchair *m_pArmchair;
в CCar...?