Boost logo

Boost Users :

Subject: [Boost-users] How to pass parameters to manage_shared_memory.construct() in Boost.Interprocess
From: Cuneyt Taskiran (ctaskiran_at_[hidden])
Date: 2010-03-13 00:38:59


I've stared at the Boost.Interprocess documentation for hours but
still haven't been able to figure this out. In the doc, they have of
creating a vector in shared memory like so:

    //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);

Now, I understand this. What I'm stuck is how to pass a second
parameter to `segment.construct()` to specify the number of elements.
The interprocess document gives the prototype for `construct()` as

    MyType *ptr = managed_memory_segment.construct<MyType>("Name")
(par1, par2...);
but when I try

    MyVector *myvector = segment.construct<MyVector>("MyVector")(100,
alloc_inst);
I get compilation errors.

My questions are:

 1. Who actually gets passed the parameters `par1, par2` from
`segment.construct`, the constructor of the object, e.g. `vector`? My
understanding is that the template allocator parameter is being
passed. Is that correct?
 2. How can I add another parameter, in addition to `alloc_inst` that
is required by the constructor of the object being created in shared
memory?

Thanks!


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net