STL コンテナ アダプタの基になるコンテナへのアクセス
C 標準テンプレート ライブラリ (STL) 内のコンテナ アダプタ (スタック、キュー、 priority_queue は、deque や Vector などの基礎となるコンテナーの上に便利なインターフェイスを提供します。ただし、カスタマイズされた操作に必要な、基になるコンテナへの参照を取得するのは難しい場合があります。
標準的な方法はありますか?
いいえ、標準はありません。これらのアダプターから基礎となるコンテナーに直接アクセスするメソッド。前述の _Get_container() メソッドは C 標準の一部ではなく、実装によって異なる場合があります。
一般的な回避策
一般的な回避策の 1 つは、テンプレートの特殊化を使用することです。
<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>
このテンプレートを特定のアダプター タイプごとに特化することにより、基礎となるコンテナーにアクセスできます。例:
<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>
priority_queue のカスタム実装
priority_queue の場合、構造体テンプレートを使用して同様のアプローチを実装できます:
<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>
公式ドキュメント
C 標準ライブラリの公式ドキュメントは、ISO/IEC Web サイト: https://www.iso.org/standard/74983 にあります。 html
以上がSTL コンテナ アダプタの基礎となるコンテナにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。