Я часами смотрел на документацию Boost.Interprocess, но так и не смог выяснить это. В документе у них есть пример создания вектора в разделяемой памяти следующим образом:
//Define an STL compatible allocator of ints that allocates from the managed_shared_memory.
//This allocator will allow placing containers in the segment
typedef allocator<int, managed_shared_memory::segment_manager> ShmemAllocator;
//Alias a vector that uses the previous STL-like allocator so that allocates
//its values from the segment
typedef vector<int, ShmemAllocator> MyVector;
int main(int argc, char *argv[])
{
//Create a new segment with given name and size
managed_shared_memory segment(create_only, "MySharedMemory", 65536);
//Initialize shared memory STL-compatible allocator
const ShmemAllocator alloc_inst (segment.get_segment_manager());
//Construct a vector named "MyVector" in shared memory with argument alloc_inst
MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);
Теперь я понимаю это. Я застрял в том, как передать второй параметр в segment.construct()
, чтобы указать количество элементов. Межпроцессный документ дает прототип для construct()
как
MyType *ptr = managed_memory_segment.construct<MyType>("Name") (par1, par2...);
но когда я пытаюсь
MyVector *myvector = segment.construct<MyVector>("MyVector")(100, alloc_inst);
Я получаю ошибки компиляции.
Мои вопросы:
- Кто на самом деле получает параметры
par1, par2
от segment.construct
, конструктор объекта, например vector
? Насколько я понимаю, передается параметр распределителя шаблонов. Это правильно?
- Как добавить еще один параметр, помимо
alloc_inst
, который требуется конструктору объекта, создаваемого в разделяемой памяти?
Об этом очень мало информации, кроме кратких документов Boost.