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