私は次のことをしようとします:
boost::interprocess ライブラリを使用して共有メモリに「大きな」配列 (1 000 000 + オブジェクト) を作成します。
私のコードには以下が含まれています:
managed_shared_memory testarray(create_only, "Test", 45000000);
typedef std::pair<SingleField, uint32_t> TestType;
TestType * test = testarray.construct<TestType>("TestArray")[45000000];
私の質問は、このブースト関数の戻り値の型をどのように把握するのですか?
上記と同じことを次のように行うと、 "::pair の代わりに SingleField が機能しないようですが、2 番目のコンテナーは必要ありません。必要なのは 1 つだけですが、1 つでは機能しません!
eclipse の出力は、どういうわけか私には難解です。ブーストを使用して以来、このような問題のために何度か停止されましたが、関数が返す「タイプ」を簡単に把握する方法はありますか? (私は Java から来たので、 Object x という「単純な」定義を使用することに慣れています) 特定の関数が返す型を特定できれば、私が自分で作成したすべての関数を使用して、実際に満足できます。シンプルですが、このライブラリには問題があるようです。
2 番目の質問: なぜこれらの例は常に "type" のペアになっているのですか? ライブラリの前提条件ですか?
-> #include を使用してみましたが、Eclipse はその std::pair を教えてくれます。問題は、なぜ T* なのかということです。これは開始セグメントアドレスですか?
お時間とご回答ありがとうございます。
エクリプス出力:
Multiple markers at this line
- unused variable test
- cannot convert const
boost::interprocess::detail::named_proxy<boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, Field, false> to
SharedMemoryInitializer::Create()::TestType* in initialization
ブースト ライブラリのマニュアルを何度か読みましたが、間違ったサイトやページを見ている可能性があります。見逃している情報を提供していただければ幸いです。