Сообщение Re[2]: Интерфейс плагина и его vtable от 14.10.2017 9:33
Изменено 14.10.2017 9:34 AlexGin
Re[2]: Интерфейс плагина и его vtable
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, AlexGin, Вы писали:
AG>>Доброе время суток, уважаемые коллеги!
CS>А какие проблемы?
CS>
CS>Ну и использование
CS>
А нужен ли тут этот метод:
Может проще вместо метода Interface<IF> — применять dynamic_cast
IPluginlInterface* pp = ...;
IPluginlInterface2* pp2 = dynamic_cast<IPluginlInterface2*>(pp);
Какие тут могут быть аргументированные соображения за или против?
CS>Здравствуйте, AlexGin, Вы писали:
AG>>Доброе время суток, уважаемые коллеги!
CS>А какие проблемы?
CS>
CS>class IPluginlInterface
CS>{
CS>public:
CS> static int iid() { return 1; }
CS> virtual IPluginlInterface* GetInterface(int id) const = 0;
CS> template<class IF>
CS> IF* Interface() const { return static_cast<IF*>(GetInterface(IF::iid())); }
CS>};
CS>class IPluginlInterface2 : IPluginlInterface
CS>{
CS>public:
CS> static int iid() { return 2; }
CS> virtual IPluginlInterface* GetInterface(int id) const
CS> {
CS> if( id == iid() ) return this;
CS> return IPluginlInterface::GetInterface(id);
CS> }
CS>};
CS>
CS>Ну и использование
CS>
CS>IPluginlInterface* pp = ...;
CS>IPluginlInterface2* pp2 = pp->Interface<IPluginlInterface2>();
CS>
А нужен ли тут этот метод:
template<class IF>
IF* Interface() const { return static_cast<IF*>(GetInterface(IF::iid())); }
Может проще вместо метода Interface<IF> — применять dynamic_cast
IPluginlInterface* pp = ...;
IPluginlInterface2* pp2 = dynamic_cast<IPluginlInterface2*>(pp);
Какие тут могут быть аргументированные соображения за или против?
Re[2]: Интерфейс плагина и его vtable
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, AlexGin, Вы писали:
AG>>Доброе время суток, уважаемые коллеги!
CS>А какие проблемы?
CS>
CS>Ну и использование
CS>
А нужен ли тут этот метод:
Может проще вместо метода Interface<IF> — применять dynamic_cast
Какие тут могут быть аргументированные соображения за или против?
CS>Здравствуйте, AlexGin, Вы писали:
AG>>Доброе время суток, уважаемые коллеги!
CS>А какие проблемы?
CS>
CS>class IPluginlInterface
CS>{
CS>public:
CS> static int iid() { return 1; }
CS> virtual IPluginlInterface* GetInterface(int id) const = 0;
CS> template<class IF>
CS> IF* Interface() const { return static_cast<IF*>(GetInterface(IF::iid())); }
CS>};
CS>class IPluginlInterface2 : IPluginlInterface
CS>{
CS>public:
CS> static int iid() { return 2; }
CS> virtual IPluginlInterface* GetInterface(int id) const
CS> {
CS> if( id == iid() ) return this;
CS> return IPluginlInterface::GetInterface(id);
CS> }
CS>};
CS>
CS>Ну и использование
CS>
CS>IPluginlInterface* pp = ...;
CS>IPluginlInterface2* pp2 = pp->Interface<IPluginlInterface2>();
CS>
А нужен ли тут этот метод:
template<class IF>
IF* Interface() const { return static_cast<IF*>(GetInterface(IF::iid())); }
Может проще вместо метода Interface<IF> — применять dynamic_cast
IPluginlInterface* pp = ...;
IPluginlInterface2* pp2 = dynamic_cast<IPluginlInterface2*>(pp);
Какие тут могут быть аргументированные соображения за или против?