2009-12-15 5 views
1

La classe CAdapt est fournie par Microsoft afin de permettre l'utilisation de classes qui remplacent l'adresse de l'opérateur (operator&) dans des conteneurs STL. MSDN a ceci à dire au sujet de l'utilisation de CAdapt:Quels conteneurs STL nécessitent l'utilisation de CAdapt?

En règle générale, vous utiliserez CAdapt lorsque vous souhaitez stocker CComBSTR, CComPtr, CComQIPtr ou _com_ptr_t objets dans un conteneur STL tel qu'un list.

à mes quesiton:

Quelle est la liste complète des conteneurs STL avec lesquels CAdapt utiliser?

Si le conteneur contient une paire clé/valeur (telle que map), spécifiez si CAdapt est requis pour la clé ou la valeur.

Répondre

5

Quelle est la liste complète des conteneurs STL avec lesquels CAdapt doit être utilisé?

Aucune. Implémentations devraient assumer l'opérateur & est surchargé, et utiliser l'expression correcte &reinterpret_cast<char&>(obj)

Maintenant, il y a une autre question que vous n'avez pas demandé:

Mon VC++ STL mise en œuvre ne pas d'accord. Il fournit CAdapt comme une solution de contournement. Quelle est la liste complète de ses conteneurs avec lesquels CAdapt devrait être utilisé?

Haut de ma tête, je jour vector<T> (les magasins comme T[] donc raisonnablement besoin arithmétique sur eux) et deque (stocke en tant que plusieurs petits T[] est si même logique). list, map, set, multiset et multimap fonctionnent tous sur des noeuds, donc ils enveloppent eux-mêmes déjà chaque objet.

+1

À l'exception du vecteur qui utilise un objet proxy. – KitsuneYMG

+0

'' & reinterpret_cast 'est-il bien défini sur n'importe quel objet? – Motti

+1

@Motti: oui, l'idée est issue du document ISO C++ WG N1324 de Jens Maurer, en réponse à CWG DR273 ('offsetof' a le même problème). – MSalters

2

Une autre chose de documentation:

Le CAdapt de classe d'adaptateur est utile car de nombreuses classes de conteneurs (tels que les classes de conteneur STL) attendent de pouvoir obtenir les adresses de leurs objets contenus en utilisant l'adresse de texte operator.strong.

Je ne pense pas que vous trouverez une liste de conteneurs qui ont cette exigence. Cela ressemble à la mise en œuvre qui dépend de moi.