2011-12-28 55 views
0

我想用下面的代码中插入一个共享载体导入共享地图:升压进程间载体,创建多个矢量指针

managed_shared_memory segment(create_only ,"MySharedMemory" ,65536); 

typedef allocator<int, managed_shared_memory::segment_manager> vecAllocator; 
typedef vector<int, vecAllocator> vec; 
typedef std::pair<int, vec* > ValueType; 
typedef allocator<ValueType, managed_shared_memory::segment_manager> ShmemAllocator; 
typedef multimap<int, vec*, std::less<int>, ShmemAllocator> MyMap; 

ShmemAllocator alloc_inst (segment.get_segment_manager()); 
vecAllocator vectorallocator (segment.get_segment_manager()); 


MyMap *mymap = segment.construct<MyMap>("MyMap")(std::less<int>(),alloc_inst); 
vec *myvec = segment.construct<vec>("myvec")(vectorallocator); 
vec *myvec1 = segment.construct<vec>("myvec1")(vectorallocator); 

myvec->push_back(10); 
myvec->push_back(9); 
myvec->push_back(8); 
myvec1->push_back(987); 
myvec1->push_back(123); 
myvec1->push_back(456); 


for(int i = 0; i < 6; ++i){ 
    for(int j = 0; j<6; j++) 
     mymap->insert(std::pair<int, vec*>(i, myvec)); 
} 
for(int i = 0; i < 6; ++i){ 
    for(int j = 0; j<6; j++) 
     mymap->insert(std::pair<int, vec*>(i, myvec1)); 
} 

代码工作..但我想要做的是构建一个载体,而不一个名字。这是做这样的事情

vec *myvec = segment.construct<vec>(vectorallocator); 
vec *myvec1 = segment.construct<vec>(vectorallocator); 

所以,如果我把它放在一个循环中,并没有与它们命名不同的每一个循环没有问题。有没有办法做到这一点? 或者至少有一个自动的方式来每次循环他们的名字不同?

回答

0

,因为我不需要载体的名称,这里是我做的。

unsigned int seconds; 
srand (time(NULL)); 
seconds = rand() % 1000000; 
std::stringstream buf; 
buf << seconds; 
vec *myvec = segment.construct<vec>((buf.str()).c_str())(vectorallocator); 

,我现在可以有很多VEC的*,而不必考虑名字.. :)

这只是一个简单的答案。