Эмуляция наследования на С++
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.05.06 10:13
Оценка: 3 (1)
Надеюсь эта статья никому не будет полезна

Дано : С++ проект из трех основных модулей(писался около 10 лет кем угодно).
1. Коммерческая библиотека без исходных кодов(без документации)
2. Либина, MFC-extension, общая для разных exe-файлов, импортирует классы из 1(одиночное наследование) и сама экспортирует всяких хлам
3. Экзешник — MFC аппликация, импортирует классы из 2 и наследуетс от них(одиночное наследование)
4. Множественное наследование заюзать никак нельзя — кучу кода придется переписать(указатели на методы, приведение типа и тд и тд и тд и тд).
5. Описаний что где как куда и почему нет. Только С++ код и, иногда, отсутствие всякого кода.
6. Море багов и недоделок
7. Време, как всегда, нет

Требуется добавить кучу функционала, для чего необходимо всунуть во все классы кучку методов, при разрушении объекта необходимо вызвать эту кучку методов.
Более того, все возможные особенности и тд и тд нужно переложить на компилер. Для надежности кода.

Конечно, без макросов не обойтись.

Главный помощник


template<class T>
class _AutoDestroyer
{
public:
    _AutoDestroyer(T* pTHIS)
    {
        m_pTHIS = pTHIS;
    }

    ~_AutoDestroyer()
    {
        if(CDataManager::GetActiveManager() != NULL)
            CDataManager::GetActiveManager()->OnDestroyObject(m_pTHIS);
    }
    T* m_pTHIS;
};



Использование


class CSuxx : наследуется хрен знает от чего
{
...
CSuxx():__destroyer(this) это пишется руками - компилер обязательно ругнется

AutoDestroyer __destroyer; // это + много всего другого в макросе
}
Re: Эмуляция наследования на С++
От: WinterMute Россия http://yarrr.ru
Дата: 18.05.06 21:13
Оценка: +1 -1 :))
Эх, а где шиблон IsGovnaKonfetka<typename TGovno>?
Re[2]: Эмуляция наследования на С++
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 19.05.06 08:33
Оценка:
Здравствуйте, WinterMute, Вы писали:

WM>Эх, а где шиблон IsGovnaKonfetka<typename TGovno>?


Это класс _AutoDestroyer
Re[3]: Эмуляция наследования на С++
От: WinterMute Россия http://yarrr.ru
Дата: 19.05.06 09:48
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:

WM>>Эх, а где шиблон IsGovnaKonfetka<typename TGovno>?


PE>Это класс _AutoDestroyer


Ну слава богу, а то я смайлик забыл, и кто-то минус уже поставил.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.