Re: Virtual Deep Calls?
От: Erop Россия  
Дата: 02.07.08 21:33
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Так вот напрягает писать постоянно явные вызовы, есть ли более удачное решение этой проблемы в С++?


AFAIK, хорошего нет. Правда не понятны границы несчастья.
Насколько у тебя глубокая иерархия, сколько функций, сколько иерархий и т. д.

Например, если иерархия ОЧЕНЬ глубокая и разветвлённая, то можно извратиться, например, так:
template<typename D, typename B>
struct pad : B { virtual void MyFunction(); };
template<typename D, typename B>
void pad<D, B>::MyFunction()
{
    B::MyFunctionImpl();
    D::MyFunctionImpl();
}

class Base {
public:
    virtual void MyFunction() { MyFunctionImpl(); }
    void MyFunctionImpl() { ... }
};

class Dir1 : public pad<Dir1, Base> {
public:
    void MyFunctionImpl() { ... }
};

class Dir2 : public pad<Dir2, Base> {
public:
    void MyFunctionImpl() { ... }
};

class Dir3 : public pad<Dir3, Dir2> {
public:
    void MyFunctionImpl() { ... }
};
ну и дальше можно сколь угодно продвинуто извращаться
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.