Как быть внутри библиотеки?
От: np9mi7 Россия  
Дата: 14.03.05 07:30
Оценка:
Добрый день. есть проблема. 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...?
"В любое мгновение принятия решения, лучшее, что вы можете сделать, это принять правильное решение; следующим лучшим вариантом будет принять неправильное решение, худший вариант – не принимать решения совсем" (c) Теодор Рузвельт.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.