Accès au conteneur sous-jacent des adaptateurs de conteneur STL
Adaptateurs de conteneur dans la bibliothèque de modèles standard C (STL), tels que la pile, la file d'attente et Priority_queue, fournit une interface pratique au-dessus des conteneurs sous-jacents comme deque ou vector. Cependant, obtenir une référence au conteneur sous-jacent, nécessaire pour des opérations personnalisées, peut être difficile.
Existe-t-il une méthode standard ?
Non, il n'y a pas de norme méthode pour accéder directement au conteneur sous-jacent à partir de ces adaptateurs. La méthode _Get_container() mentionnée ne fait pas partie du standard C et peut varier en fonction de l'implémentation.
Solution de contournement courante
Une solution de contournement courante consiste à utiliser la spécialisation de modèle, comme suit :
<code class="cpp">template <class Type> struct ContainerAdapter { static Type& container(const Type& adapter) { return adapter; // Assumes underlying container is of the same type } };</code>
En spécialisant ce modèle pour chaque type d'adaptateur spécifique, nous pouvons accéder au conteneur sous-jacent. Par exemple :
<code class="cpp">template <> struct ContainerAdapter<std::stack<int>> { static std::deque<int>& container(const std::stack<int>& stack) { return stack.*&stack::_deque; // Internal implementation hack } };</code>
Implémentation personnalisée pour priorité_queue
Dans le cas de priorité_queue, une approche similaire peut être implémentée à l'aide d'un modèle de structure :
<code class="cpp">template <class T, class S, class C> struct PriorityQueueAdapter { static S& container(priority_queue<T, S, C>& pq) { // Use a type trick to access private member struct Inner : private priority_queue<T, S, C> { static S& container(priority_queue<T, S, C>& pq) { return pq.*&Inner::c; } }; return Inner::container(pq); } };</code>
Documentation officielle
La documentation officielle de la bibliothèque standard C est disponible sur le site Web ISO/IEC : https://www.iso.org/standard/74983. html
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!