Здравствуйте, l33thaxor, Вы писали:
L>...
L>Вопрос: насколько хорошо такое решение через dynamic_cast?
В качестве "подставки" для какого-то особого случая — сойдет.
А как часть общего дизайна — не годится. Интерфейсы на то и интерфейсы,
чтобы их один раз спроектировать, а потом использовать, не меняя,
на протяжении долгого времени.
В COM (Windows) этот вопрос решили следующим образом — все классы наследуются от
абстрактного IUnknown, который имеет метод QueryInterface для запроса интерфейсов.
Получается, что любой объект может в рантайме узнавать, поддерживает ли другой
объект необходимую функциональность. Для этого, правда, пришлось вводить такие
вещи, как подсчет ссылок, глобальные идентификаторы (GUID), и др. Но объекты COM
обычно сами по себе довольно пухленькие, поэтому небольшой оверхед не заметен.
L>Есть ли другие варианты?
Такой, к примеру:
void SomeFunction(IFaceOld *pConcreteOld)
{
IFaceNew *pConcreteNew = new IFaceNew(pConcreteOld);
...
delete pConcreteNew;
}