Какие контейнеры STL требуют использования CAdapt? - PullRequest
1 голос
/ 15 декабря 2009

Класс CAdapt предоставлен Microsoft для того, чтобы разрешить использование классов, которые переопределяют адрес оператора (operator&) в контейнерах STL. MSDN говорит об использовании CAdapt:

Как правило, вы будете использовать CAdapt, когда хотите сохранить объекты CComBSTR, CComPtr, CComQIPtr или _com_ptr_t в контейнере STL, например list.

На мой вопрос:

Каков полный список контейнеров STL, с которыми следует использовать CAdapt?

Если контейнер содержит пару ключ / значение (например, map), укажите, требуется ли CAdapt для ключа или значения.

Ответы [ 2 ]

5 голосов
/ 15 декабря 2009

Каков полный список контейнеров STL, с которыми следует использовать CAdapt?

None. Реализации должны предполагать, что оператор & перегружен, и использовать правильное выражение &reinterpret_cast<char&>(obj)

Теперь есть еще один вопрос, который вы не задавали:

Моя реализация VC ++ STL не соответствует. Это обеспечивает CAdapt в качестве обходного пути. Каков полный список его контейнеров, с которыми следует использовать CAdapt?

Наверху, я бы на день vector<T> (сохраняет их как T[], так что для них разумно нужна арифметика) и deque (хранит их как кратные T[] с таким же обоснованием). list, map, set, multiset и multimap все работают на узлах, поэтому они сами уже обертывают каждый объект.

2 голосов
/ 15 декабря 2009

Другое дело из документации :

Класс адаптера CAdapt полезен, потому что многие классы контейнеров (например, классы контейнеров STL) ожидают, что смогут получать адреса содержащихся в них объектов , используя текст address-of operator.strong.

Не думаю, что вы найдете список контейнеров с этим требованием. Это звучит как реализация, зависящая от меня.

...