Короче говоря, мой вопрос: если у вас есть класс, MyClass<T>
, как вы можете изменить определение класса для поддержки случаев, когда у вас есть MyClass<T, Alloc>
, аналогично тому, как, скажем, вектор STL.
Мне нужна эта функциональность для поддержки распределителя для разделяемой памяти. В частности, я пытаюсь реализовать кольцевой буфер в разделяемой памяти. В настоящее время он имеет следующий 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);
Однако я не знаю, как добавить явный распределитель в шаблон класса.