問題タブ [ptr-vector]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost::ptr_vector からの参照ではなくポインターを取得する
私は最近、ブースト ptr_vector がヒープ割り当てオブジェクトのコレクションを管理するのに役立つことを発見しました。ポインター コレクション ライブラリは非常に優れていますが、残念なことに、1 つのことが足を引っ張っています。
コードの別の部分では、ptr_vector 内のオブジェクトの 1 つへのポインターを明示的に保持する必要があります (特定の理由により、参照にすることはできません)。ただし、ptr_vector 内のオブジェクトにアクセスすると、参照 T& が取得されます (ptr_vector.push_back(T *) を使用した場合でも)。
boost::ptr_vector から単純なポインタを取得できる方法はありますか?
c++ - ptr_vectorを含むクラスのベクトルを作成できません
私はのを持っている必要がありstd::vector
ますboost::ptr_vector
。管理を容易にするために、boost :: ptr_vectorをクラス(Zoo
)で囲み、そのstd :: vector()を作成しましたallZoos
。これを再現するための最小限のコードを見てください。
宣言allZoos
は問題ありませんが、そのメンバー関数のいずれかを呼び出すと、コンパイラエラーが発生します:(完全なエラーログが長すぎて、投稿されませんでした)
これは、boostのコピー不可能なユーティリティクラスやカスタムnew_clone
関数とは何の関係もなく、運が悪かったので試してみました。どうすればそれを解決できますか?
(私はVS2010を使用しています)
c++ - boost::ptr_vector に関する質問
オブジェクトへのポリモーフィック ポインターが必要boost::ptr_vector
ですが (この部分はほとんど機能しています)、一部の機能に問題があります。
ケーススイッチを使用してロードしptr_vector
て、どの子タイプを指すかを判断したいので、複数のポインターをただ浮かんでいる必要はありませんが、タイプを上書きすると、ポインターはポリモーフィックにそれを指しており、ptr_vector
その中のすべてを上書きします同じポインターを使用してプッシュされました(これは正確なポインターを保存していることに関係していると思います)。これは、ポインターだけでなくオブジェクトのコピー/クローンを与えることで解決できると思いますが、どこにあるのかわかりません、またはこれを行う方法を伝える方法。
私が抱えているもう1つの問題は、ポインターが存在するスコープが終了すると、すべてのオブジェクトが存在しなくなることですptr_vector
(これは問題を修正することで解決できると感じています段落2)
別の質問は、特定のオブジェクトを削除する方法ptr_vector
です。たとえば、オブジェクトに 30 個以上のオブジェクトがある場合、オブジェクト 5 を削除する必要があることがわかりましたptr_vector
(削除するオブジェクトを検索することに注意してください)。 )
編集:私はすでにclone
メソッドを実装しており、それらは正しく機能しています
編集:コード例
gameObject (ポリモーフィック型)
object Manager (スコープの例を示すため)
主要
c++ - 「参照による」ptr_vector処理の削除を後押し
私のクラスにはポインタベクトルがあります:
そして、いくつかの「セットアップ」メソッドでは、ベクターにいくつかのクラスを追加します。
これで、このクラスのクライアントは、クラスオブジェクトをこのクラスリストに追加したいと思うかもしれません。
そして、彼らは同じポインタを渡すことによってそれらを削除したいと思うかもしれません:
正しく理解できれば、この回答(https://stackoverflow.com/a/357043/48998)を読んだ後、次のようにそのメソッドを実装する必要があります。
また、ptr_vector.release()から返されるauto_ptrでrelease()をもう一度呼び出す必要があることを理解しています。
これにより、このメソッドの呼び出し元(RemoveThing ...)がそのClassオブジェクトへの有効な参照を保持し、削除されないことが保証されると想定して正しいですか?私は単にvecに一時的な所有権を取得してからそれを放棄したいだけです。
c++ - ptr_vectorを使用する場合の派生クラスのメソッドへのアクセス
設定
目標
両方の派生クラスのオブジェクトを含むベクトルを持ち、子固有のメソッドにアクセスできるようにします。
現在の「解決策」
問題
明らかに、「it」はDerivedAまたはDerivedBとして認識されないため、子固有のメソッドにアクセスできません。何らかの形のキャストが必要なので、質問は次のとおりだと思います。
イテレータを正しい派生クラスに適切にキャストするにはどうすればよいですか?
たぶん、このシナリオ全体を構築するためのより良い方法がありますか?
編集: 私は少し不明確だったようです。派生クラスのメソッドの目的は根本的に異なります。派生クラスArmorとWeaponを持つ基本クラスItemについて考えてみます。
この例では、たとえば、Weaponにfloatを返す可能性のある関数getDamage()がある理由がわかります。
この機能はアーマーには必要なく、似たようなものもありません。
この例では、ベクターを、任意の数とタイプのアイテムを含むことができる在庫として見ることができます。たぶん、スタックといくつかの用途があるアイテムでさえ(ポーションかもしれません)
c++ - ptr_vector が適切に解放されていない
ptr_vector を使用していくつかのポインターを格納しようとしていますが、メイン メソッドを実行するとすぐにエラーが発生します。これが私のコードです:
これは私が得ているエラーメッセージです:
私は何を間違っていますか?ありがとう!
c++ - ブーストptr_vectorイテレータ
ツリーノードの子を反復処理しています。子はptr_vectorに格納され、反復中のある時点で無限再帰に陥りますが、その理由はわかりません。
無限再帰が発生するメソッドは次のとおりです(このメソッドは、ツリー構造をに出力するために使用されますcout
)。
そして、これが私がナビゲートしているツリー構造です(ネストされた目的はedge
親ノードと子ノードの間の距離を表すことであることに注意してください):
さらに、この無限再帰は、次のメソッドが呼び出された後にのみ発生することに気付きました。
この方法で無限再帰が発生するのはなぜですか?ありがとう!
c++ - ptr_vector をヒープとして使用できますか?
ヒープ (sort_heap) として使用されている std:vector を ptr_vector に置き換えたいと考えています。http://sourceforge.net/projects/ptr-vector/
の ptr_vector の作成者は、std 名前空間の並べ替えアルゴリズムを使用することは、ポインターではなくオブジェクトの移動につながるため、良い考えではないと述べています。彼は、sourceforge バージョン (2006 年にさかのぼる) に明らかに組み込まれている stdx:sort... アルゴリズムについて言及しています。
ptr_vector のブースト実装で後者を見つけることができません。したがって、ブースト ptr_vector に依存している場合 (方法)、パフォーマンスを犠牲にすることなく、sort_heap でコンテナーを使用できますか?
c++ - boost::ptr_vectorから「this」を消去する方法
クラス「holdable」へのポインタを含むboost::ptr_vectorがあります。
次のように、保持可能なクラス内からこのベクトルに新しいアイテムを追加します。
ここで、currentplanetは、ptr_vectorを含むクラスのオブジェクトへのポインタです。これはすべて問題ありません。
私が混乱しているのは、ptr_vectorのエントリを独自のクラス内の関数から削除する方法です。私はしようとしています:
ここでの同様の質問への回答によると:boost :: ptr_vectorから要素を消去する方法ですが、おそらく「this」の使用に関して、どこかで明らかに間違っています。
コンパイルしようとすると、stl_algo.hから次のようなエラーが表示されます
それは明らかなことだと思いますが、おそらくptr_vectorの間接参照に混乱しているでしょう...事前に回答をありがとう!
c++ - boost::ptr_vector にランダムに割り当てる
boost::ptr_vector にランダムに割り当てたい。通常の STL ベクトルを使用すると、次のようになります。
私はboost::ptr_vectorで同じことをしようとしています:
しかし、次のエラーが発生しています:
しかし、これを理解するのに苦労しています