Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > METHOD_PROLOGUE(theClass, localClass )


Автор: np9mi7 10.3.2005, 14:41
Добрый день.
В VС есть макрос который делает this:
METHOD_PROLOGUE(theClass, localClass )
Пример:
Код

class CSpaceship
{
protected:
    int m_nPosition;
    int m_nAcceleration;
    int m_nColor;
public:
    CSpaceship()
        { m_nPosition = m_nAcceleration = m_nColor = 0; }
    class XMotion : public IMotion
    {
    public:
        XMotion() { }
        virtual void Fly();
        virtual int& GetPosition();
    } m_xMotion;

    class XVisual : public IVisual
    {
    public:
        XVisual() { }
        virtual void Display();
    } m_xVisual;

    friend class XVisual;
    friend class XMotion;
};



макрос
Код

int& CSpaceship::XMotion::GetPosition()
{
    METHOD_PROLOGUE(CSpaceship, Motion) // makes pThis
    return pThis->m_nPosition;
}



а в Builder-е альтернатива этому?

Автор: np9mi7 10.3.2005, 15:46
Код

#define METHOD_PROLOGUE(theClass, localClass) \
   theClass* pThis = ((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass)));
, во как говорят

Автор: seagull 10.3.2005, 15:47
Опиши, что именно делает этот макрос. А то из приведенного примера не ясно для чего ты его используешь.

Автор: np9mi7 10.3.2005, 17:17
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_COM_Interface_Entry_Points.asp

Автор: Vyacheslav 11.3.2005, 10:12
Ну так и какие проблемы?
Напиши определение макроса у себя в коде и используй на здоровье
Только при использовании не забудь добавить
#include <stddef.h>

Автор: np9mi7 11.3.2005, 10:56
Да нет уже проблем.... НАписал и использую..... просто нужно было топик логически закончить....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)