TheXpert:
Раз уж пошла такая пьянка.... Хочется услышать официальное мнение по поводу.
Ну и если не планируется, универсальный способ замены оного.
Множественное наследование не планируется. Прежде всего из-за безопасного кастинга. Проверки при кастинге многократно усложнятся, а отключать проверки мы не можем из соображений взломобезопасности.
Универсальный способ замены - включение объектов разных типов
class Ancestor1 { public: void Method1 {} }; class Ancestor2 { public: void Method2 {} }; class Descendent { private Ancestor1 a1; Ancestor2 a2; public: void Method1 {a1.Method1;} void Method2 {a2.Method2;} };TheXpert:
То есть? Можете объяснить на примере?
Вот пример. Как модифицировать и что вместо вопросиков?
class Handler1 { public: virtual void Action1(); }; class Some1 { public: Some1(Handler1* handler) : m_Handler(handler) { } private: Handler1* m_Handler; }; class Handler2 { public: virtual void Action2(); }; class Some2 { public: Some2(Handler2* handler) : m_Handler(handler) { } private: Handler2* m_Handler; }; class Handler { public: void Action1() {} void Action2() {} Handler() : m_Some1(??????) , m_Some2(??????) {} private: Some1 m_Some1; Some2 m_Some2; };
Странная архитектура, но сделать можно так
class Handler1 { public: virtual void Action1() { } }; class Some1 { public: Some1(Handler1* handler) : m_Handler(handler) { m_Handler.Action1(); } private: Handler1* m_Handler; }; class Handler2 { public: virtual void Action2() { } }; class Some2 { public: Some2(Handler2* handler) : m_Handler(handler) { m_Handler.Action2(); } private: Handler2* m_Handler; }; class Handler; class HandlerGlue1 : public Handler1 { Handler *m_h; public: HandlerGlue1(Handler *h):m_h(h) { } virtual void Action1() { m_h.Action1(); } }; class HandlerGlue2 : public Handler2 { Handler *m_h; public: HandlerGlue2(Handler *h):m_h(h) { } virtual void Action2() { m_h.Action2(); } }; class Handler { public: void Action1() { Print(__FUNCTION__); } void Action2() { Print(__FUNCTION__); } Handler() : m_h1(GetPointer(this)) , m_h2(GetPointer(this)) , m_Some1(GetPointer(m_h1)) , m_Some2(GetPointer(m_h2)) {} private: HandlerGlue1 m_h1; HandlerGlue2 m_h2; Some1 m_Some1; Some2 m_Some2; }; void OnStart() { Handler h; }
mql5:
Канает :) спасибо.сделать можно так
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Раз уж пошла такая пьянка.... Хочется услышать официальное мнение по поводу.
Ну и если не планируется, универсальный способ замены оного.