Сообщение Re[3]: Автоматический обход иерархии от 14.09.2022 12:23
Изменено 14.09.2022 12:29 Went
Re[3]: Автоматический обход иерархии
Здравствуйте, Kazmerchuk Pavel, Вы писали:
KP>Классов произвольное количество, функций две.
Можно написать шаблон класса-прокладки, который будет корректно вызывать нужные функции, а наследникам предоставлять другие функции для перекрытия:
KP>Классов произвольное количество, функций две.
Можно написать шаблон класса-прокладки, который будет корректно вызывать нужные функции, а наследникам предоставлять другие функции для перекрытия:
// Код библиотеки
class A
{
virtual void foo();
virtual void bar();
};
template<class Base>
class UserInheritedProxy : public Base
{
protected:
virtual void do_foo() {}
virtual void do_bar() {}
private:
virtual void foo() {Base::foo(); do_foo();}
virtual void bar() {Base::bar(); do_bar();}
};
// Код пользователя
class User1 : UserInheritedProxy<A>
{
protected:
virtual void do_foo() {UserInheritedProxy<A>::do_foo();} // Могу базу звать
virtual void do_bar() {} // А могу не звать, результат одинаков.
}
Re[3]: Автоматический обход иерархии
Здравствуйте, Kazmerchuk Pavel, Вы писали:
KP>Классов произвольное количество, функций две.
Можно написать шаблон класса-прокладки, который будет корректно вызывать нужные функции, а наследникам предоставлять другие функции для перекрытия:
KP>Классов произвольное количество, функций две.
Можно написать шаблон класса-прокладки, который будет корректно вызывать нужные функции, а наследникам предоставлять другие функции для перекрытия:
// Код библиотеки
class A
{
protected:
virtual void foo();
virtual void bar();
};
template<class Base>
class UserInheritedProxy : public Base
{
protected:
virtual void do_foo() {}
virtual void do_bar() {}
private:
virtual void foo() {Base::foo(); do_foo();}
virtual void bar() {Base::bar(); do_bar();}
};
// Код пользователя
class User1 : UserInheritedProxy<A>
{
protected:
virtual void do_foo() {UserInheritedProxy<A>::do_foo();} // Могу базу звать
virtual void do_bar() {} // А могу не звать, результат одинаков.
}