Очень часто, при наследовании, хочется иметь удобный способ вызова функций родительского класса. Для этого можно завести пару дефайнов:
- #define DECLARE_ROOT_OBJECT(cls) \
- typedef cls Self; \
-
- #define DECLARE_OBJECT(cls) \
- typedef Self Super; \
- typedef cls Self;
Использовать так:
- class Base
- {
- public:
- DECLARE_ROOT_OBJECT(Base)
-
- virtual void Foo();
- };
-
- class Derived : public Base
- {
- public:
- DECLARE_OBJECT(Derived)
-
- void Foo()
- {
- Super::Foo();
- }
- };
* Подсветка синтаксиса http://quickhighlighter.com
Интересно. Но ведь и так, чтобы обратиться к родительскому достаточно написать Base::Foo(); Зато, конечно, появилась универсальность обращения. А что если классов будет много? Варнинги не вылезут на передефайны?
ОтветитьУдалитьНет, не вылезут, они в разных скоупах...
ОтветитьУдалитьА как быть с множественным наследованием?
ОтветитьУдалитьпо старинке...
ОтветитьУдалить