увеличить межпроцессную строку unordered_map

Я пытаюсь создать unordered_map в разделяемой памяти с помощью библиотеки Boost Interprocess. Вот код, который я пытаюсь использовать (на примерах из документации Boost Interprocess):

#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <functional>
#include <boost/functional/hash.hpp>
#include <boost/unordered_map.hpp>
#include <iostream>
#include <string>
#include <boost/interprocess/containers/string.hpp>

namespace bipc = boost::interprocess;

typedef bipc::allocator<char, bipc::managed_shared_memory::segment_manager> CharAllocator;
typedef bipc::basic_string<char, std::char_traits<char>, CharAllocator> ShmemString;struct Person
{
int age;
ShmemString name;
double salary;

Person(int i,
double sal,
const char* s,
const char_allocator& a)
: age(i),
name(s, a),
salary(sal)
{
}
void print() {}
}

typedef ShmemString KeyType;
typedef Person MappedType;

typedef std::pair< KeyType, MappedType > MapPersonType;typedef bipc::allocator< MapPersonType,
bipc::managed_shared_memory::segment_manager >
ShMemAllocator;

typedef boost::unordered_map< KeyType,
MappedType,
boost::hash<KeyType>,
std::equal_to<KeyType>,
ShMemAllocator >
PersonMap;

Вот что я пытаюсь сделать в основной программе:

int main()
{
bipc::managed_shared_memory segment(bipc::create_only, "MySharedMemory", 65536);

PersonMap *persons = segment.construct<PersonMap>("MyHashMap")
( 3, boost::hash<ShmemString>(), std::equal_to<ShmemString>()
, segment.get_allocator<MapPersonType>());

char_allocator alloc(segment.get_allocator<char>());

Person p1(20, 10000, "ABC", alloc);
persons->insert(MapPersonType(ShmemString("Person1", alloc), p1));
}

Используя приведенный выше код, я могу создать unordered_map в общей памяти. Однако, когда я пытаюсь получить доступ к карте, мне нужно использовать такой синтаксис, как

persons->at(ShmemString("H", segment.get_allocator<char>())).print();

Однако я бы предпочел сделать это с помощью std :: string, что приведет к ошибкам компиляции:

persons->at(std::string("H")).print();

Можно ли написать приведенное выше утверждение, то есть получить доступ к карте, размещенной в разделяемой памяти, с помощью std :: string?

0

Решение

Я отправил этот в списке рассылки boost-пользователей. И получил ответ от автора Boost.Interprocess, что это не может быть сделано.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector