4. Объекты
class object {
public:
template <class T> virtual
T * dynamic_cast(const type_info& t = typeid(T) )
};
Аноним, 1995
В главе 2 обсуждались основы интерфейсов СОМ вообще и интерфейс IUnknown
в частности. Было дано понятие о том, что путем наследования дополнительным
интерфейсам объекты могут выставлять более одного вида функциональных
возможностей. Был также продемонстрирован механизм, с помощью которого
клиенты могут опрашивать объекты, чтобы найти среди них доступные функциональные
возможности. Этот механизм - QueryInterface (Интерфейс запросов)
- был выделен как версия С++-оператора преобразования типа dynamic_cast,
не зависящая от языка программирования и от компилятора.
В предыдущей главе было показано, что QueryInterface можно
реализовать непосредственно, используя статические преобразования типа
для того, чтобы ограничить область действия указателя this на
объект типом интерфейса, который запрашивается клиентом. На физическом
уровне этот способ означает просто преобразование идентификаторов интерфейса
в объект с помощью соответствующего смещения, то есть способ, который
применяется любым компилятором C++ при реализации dynamic_cast.
Хотя реализации QueryInterface из предыдущей главы являются
вполне допустимыми для СОМ, правила IUnknown предоставляют разработчику
объектов значительно больше гибкости, чем было показано до сих пор. В
данной главе эти правила будут исследованы, и продемонстрированы способы
реализации, которые из них вытекают.
Снова Unknown
QueryInterface симметрична
QueryInterface транзитивна
QueryInterface рефлективна
Объекты имеют статический тип
Единственность и идентификация
QueryInterface и IUnknown
Множественные интерфейсы и имена методов
Динамическая композиция
Двоичная композиция
Включение
Где мы находимся?
|