要するに、私の質問は次のとおりです。クラスがある場合、たとえばSTLベクトルが提供する方法と同様にMyClass<T>
、クラス定義を変更して、ある場合をサポートするにはどうすればよいですか。MyClass<T, Alloc>
共有メモリのアロケータをサポートするには、この機能が必要です。具体的には、共有メモリにリングバッファを実装しようとしています。現在、次のctorがあります。
template<typename ItemType>
SharedMemoryBuffer<ItemType>::SharedMemoryBuffer( unsigned long capacity, std::string name )
ここItemType
で、はバッファの各スロットに配置されるデータのタイプです。
さて、これはメインプログラムからバッファを作成するときに素晴らしい働きをします。
SharedMemoryBuffer<int>* sb;
sb = new SharedMemoryBuffer<int>(BUFFER_CAPACITY + 1, sharedMemoryName);
ただし、この場合、バッファ自体は共有メモリに作成されないため、他のプロセスからアクセスできません。私がやりたいのは、次のようなことができるようにすることです
typedef allocator<int, managed_shared_memory::segment_manager> ShmemAllocator;
typedef SharedMemoryBuffer<int, ShmemAllocator> MyBuffer;
managed_shared_memory segment(create_only, "MySharedMemory", 65536);
const ShmemAllocator alloc_inst (segment.get_segment_manager());
MyBuffer *mybuf = segment.construct<MyBuffer>("MyBuffer")(alloc_inst);
ただし、クラステンプレートに明示的なアロケータを追加する方法がわかりません。