Re[107]: ООП головного мозга
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.10.11 07:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, samius, Вы писали:


G>>>Тогда приведи корректный с точки зрения COM способ получения разных указателей на IUnknown для одного объекта.

S>>Обращение к QI может вернуть другой указатель, чем указатель, по которому к нему обратились. Так как любой интерфейс COM (даже еще не объявленный) расширяет IUnknown, то любой указатель, вернувшийся из QI является указателем на IUnknown.
G>Что значит "является указателем IUnknown" ? Тут ты говоришь в терминах ООП в С++. С точки зрения COM единственный способ получения IUnknown — выполнить QUeryInterface. Я и говорю. что ты рассматриваешь какую-то смесь COM и C++, которая COM не является.

All interfaces in COM are polymorphic with IUnknown, that is, if you look at the first three functions in any interface you see QueryInterface, AddRef, and Release. In other words, IUnknown is base interface from which
all other interfaces inherit.

Посему указатель на любой интерфейс любого COM объекта есть указатель на IUnknown.

S>>Напиши все-таки код QI, разрешающий навигацию между интерфейсами и не использующий состояние. Или все-таки признай, что COM identity test использует состояние.

G>Ты же сам писал что если наблюдаемое поведение не зависит от состояния, то значит совсем не зависит.
Ты же был там со мной категорически несогласен. А тут ссылаешься на меня?

G>В случае COM это выполняется.

Нет. Нигде не написано что QI не может изменять состояние объекта. Более того, оно именно это и делает, согласно многим сценариям COM. QI не является детерминированной в общем случае. Потому тут нельзя так легко отречься от использования состояния.

G>Если нужна реализация, то пусть возвращается всегда первый face.

Я не понял, что такое первый face, откуда он берется, и почему он должен быть именно IUnknown гранью.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.