boost::interprocessを使用します。このライブラリはこの機能を公開します。
編集:ここであなたがする必要があるいくつかの変更があります:
この例では、共有メモリ ブロックから割り当てるアロケータが既に定義されています。これをmap
およびに渡す必要がありますqueue
。これは、定義を変更する必要があることを意味します。
class B
{
map<int, A, less<int>, MapShmemAllocator> table;
// Constructor of the map needs the instance of the allocator
B(MapShmemAllocator& alloc) : table(less<int>(), alloc)
{ }
}
の場合queue
、実際には単なるアダプターであるため、これは少し複雑です。そのため、実際の実装クラスをテンプレート パラメーターとして渡す必要があります。
typedef queue<int, deque<int, QueueShmemAllocator> > QueueType;
クラスC
が少し変更されます。
class C
{
B entries;
QueueType d, e;
C(MapShmemAllocator& allocM, QueueShmemAllocator& allocQ) : entries(allocM), d(allocQ), e(allocQ)
{ }
}
次に、セグメント マネージャーから、C
アロケーターを使用して のインスタンスを作成します。
C *pC = segment.construct<C>("CInst")(allocM_inst, allocQ_inst);
私はそれがトリックを行うべきだと思います。queue
注: 2 つのアロケータ ( 用と 用に 1 つ)を提供する必要がありますmap
。同じセグメント マネージャから 2 つのアロケータを構築できるかどうかはわかりませんが、なぜできないのかわかりません。