問題タブ [boost-ptr-container]
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++ - VisualStudioで`boost:: ptr_vector`をよりデバッガーに適したものにする簡単な方法はありますか?
この質問boost::ptr_container
からの回答の結果として使用を検討しています。ライブラリに関する私の最大の問題は、MSVCデバッガーがコレクションを認識しないため、デバッガーでコレクションの内容を表示できないことです。そのため、コンテナーの内容を表示できません。(すべてのデータは内部として保存されます)void *
MSVCには「デバッガビジュアライザー」と呼ばれる機能があり、ユーザーがこれらの種類のことについてデバッガーをよりスマートにすることができると聞きましたが、私はこのようなことを書いたことがなく、そのようなことについてはそれほど固執していません。
たとえば、の動作boost::shared_ptr
をMSVC独自ののと比較しますstd::tr1::shared_ptr
。デバッガー(つまり、ウォッチウィンドウ)では、ブーストバージョンは、共有ポインターの実装に使用される内部変数の大きな混乱として表示されますが、MSVCバージョンは、オブジェクトへのプレーンポインターとして表示されます(およびの内部shared_ptr
は隠れた)。
そのようなものを使用または実装するにはどうすればよいですか?
glibc - glibc detected : free(): invalid pointer: with simple boost::ptr_map example
I know there are scores of questions with "* glibc detected * free(): invalid pointer", but the following is a minimalist example with boost::ptr_map:
The code compiles, but at run time:
It's been repeated throughout SO that this kind of error is caused when trying to delete an invalid pointer. However, what changes in the above very simple code would avert this error?
The background of this question is that I am struggling to understand the proper usage of boost::ptr_map. Unfortunately, the official boost documentation is very sparse as far as ptr_map is concerned (no tutorial, no example with ptr_map). No boost::ptr_map tutorial seem to exist on the web. I have problems retrieving values, and accessing methods to the mapped classes I created. Thus, I tried to create the simplest example I could, but got off on a bad start as evidenced above.
Any help with the glibc error above and with ptr_map in general is appreciated. Thanks.
Edit: I have read over 20 times, studied and copied the examples from the official boost tutorial http://www.boost.org/doc/libs/1_46_0/libs/ptr_container/doc/tutorial.html As stated above, the boost tutorial barely covers ptr_map, so linking to it won't make any bit of difference. Basically, I have gone through and through the whole boost ptr container manual many times.
c++ - boost::ptr_unordered_map に const オブジェクトへのポインターを格納する
私はうまくいかないようですboost::ptr_unordered_map<uint32_t, const Foo>
- 基礎となる実装は、物事をにキャストしているように見えますvoid*
。
弾丸を噛んで、const_cast<Foo*>
アイテムを挿入するときにこれへのアクセスをラップするメソッドを作成する必要がありますか、それともここに欠けているものがありますか? const オブジェクト ( const Foo*
) へのポインターを格納する方法はありますか?
c++ - C ++ Befriending boost :: ptr_map / boost::checked_deleteが失敗します
それ自体のインスタンスを格納する特定のクラス内でboost::ptr_mapを使用したいと思います。ただし、次の例を検討してください。
エラーは次の行で発生します
ここで何が起こっているのですか?うまくいかないの?問題は、テンプレートが含まれているコンパイルユニットで定義されており、boost::checked_deleteがbosst::ptr_mapの実装ソース内の別のコンパイルユニットから呼び出されていることだと思います。ですから、それは私が友達として宣言したのと同じ機能ではありません。
ただし、この問題の回避策はありますか?
c++ - 任意のマップからのmapped_typeへのポインタまたは参照の取得
編集:問題の解決策を見つけて書き留めましたが、解決策がまだ理想的ではない可能性があるため、質問には回答していません。
マップのマップでルーチンを実行するように設計された小さなライブラリを作成していますが、(マップの value_type の second_type に応じて) マップのマップのタイプに関係なく、mapped_type (std::map、boost::ptr_map など)。
さらに詳しく説明するために、いくつかの入力タイプと必要な出力タイプを表にしました。
私のコードは、ケース A、B、D、E には合格しますが、ケース C と F には失敗します。
これを行うためにboost::mplを使用しようとしています。これはこれまでに作成したものですが、両方のバージョンのコードを使用して同じエラーが発生します。
エラー。
マップへのポインターではない左辺値を処理するための構造体の変更された特殊化。
c++ - コンテナ内のすべてのオブジェクトを削除するSTLアルゴリズム?
delete *the_object_iterator;
すべてのオブジェクトに対して実行する STL ユーティリティ/アルゴリズムはありますか? clear()
無事に行けるように?STL コンテナは でset
、オブジェクトは で作成された C++ クラスへのポインタnew
です。
ブーストが最適なソリューションのようです。私の目標は、コピー不可能なクラスでのコピー構築を避けることでした。
c++ - 挿入したポインターがわかっている場合、boost::ptr_set から削除するにはどうすればよいですか?
boost::ptr_set
挿入したポインターがわかっている場合にa から削除するにはどうすればよいですか? (挿入されたクラス オブジェクトへのthisポインターがあります)。
これは、私がやろうとしていることを示すための不自然な例です:
this
挿入されたオブジェクトへのポインタを持っていますが、どのように to を伝えますboost::ptr_set
かerase(this)
? 注: 挿入されたオブジェクト内にはもういませんが、そのオブジェクトへのポインターがあります。
アップデート
コメントの 1 つは、私が のすべての要件を満たしていないというものでしたboost::ptr_set
。要件は何ですか?
を提供するとうまくいくと思います< operator
か?
答え
m_srv_conns1.erase(this_ptr);
に変更m_srv_conns1.erase(*this_ptr);
ServerConnection1
クラス内に次のコードを挿入します。
bool operator<(const ServerConnection1 & sc1) const
{
return (this < &sc1); //Pointer comparison
}
c++ - ブースト ポインター コンテナー - クラスを ptr_map のキーとして格納できません
Boost Pointer Container ライブラリをいじり、チュートリアルの例を利用してライブラリの感触をつかもうとしています。何かが足りないのかもしれませんが、ptr_map のキーとして定義した単純なクラスを保存できないようです。ただし、同じキーが ptr_set に対して機能します。
これにより、次の正しい出力が生成されます。
ただし、MammalsContainer を ptr_map に切り替えると、コンパイルすら行われません。
次のコンパイル エラーが発生します。
Pointer Container boost ページのすべてのドキュメント/例と、ptr_map に関連する多くの StackOverflow の問題を読みました。std::string や int のような単純なプリミティブ キーを使用することが、すべてのユース ケースに含まれているようです。上記の例で string/int キーがあり、Mammal クラスを値として格納すると機能します。
私が本当に構築したいのは、Key オブジェクト階層であり、特殊な operator< を提供して、並べ替えが機能するようにすることです。私の最終的なユースケースは、キーがさまざまなプロパティで構成できることです。つまり、Key1 には name 属性のみが含まれます。Key2 には、名前と場所が含まれています。さらに、マップの値もオブジェクト階層によって表されます。私は最初に
しかし、連想コンテナのポリモーフィズムを処理するより効率的なソリューションとして、ptr_container ライブラリに導かれました。あるいは、私はその結論に飛びついたのかもしれません。
c++ - std::set と boost::ptr_set の違いは?
a を aに変換するように一部のコードを変更しstd::set
ましたboost::ptr_set
。ただし、コードはコンパイルされません。問題は、挿入からの戻り値が挿入 (a )ptr_set
と同じであると想定していることです。Google で 1 時間後、これを見つけました。挿入からの戻り値がbool のように見えることがわかりました。set
pair<myIter, bool>
ptr_set
ptr コンテナーと std コンテナーの違いに関する決定的なドキュメントはありますか? ブースト Web サイトで何も見つかりませんでしたが、単に私が愚かなだけかもしれません...
編集
わかりました-私を混乱させたのは、このコード
gcc の 1 行目にはエラーが報告されていませんがoperator=
、2 行目には一致が報告されていないため、エラーは戻り値の型にあると考えられました。ただし、2 行目をコメントアウトすると、1 行目がエラーとして報告されます (release はイテレータを返しません)。私の混乱は、私が投稿したリンクによってさらに悪化しました. ただし、リンクを読んでみると、その時点でコードが完成していなかったことが明らかになります。ありがとうケレック。