2011-12-28 4 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

그럼 내 이전 대답은 그래서 여기에 우리는 내가 원하는 것을 얻을 익명 인스턴스를 사용할 필요가 정답 입니다 .. 바보였다. 그것은

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

가 여기 http://www.boost.org/doc/libs/1_48_0/doc/html/interprocess/managed_memory_segments.html#interprocess.managed_memory_segments.managed_memory_segment_features.anonymous

설명 또한 다른 좋은 기능에 대해 설명을 사용하여 수행됩니다.

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를 많이 가질 수 있습니다 .. :)

이것은 단지 사소한 답변입니다.