Я пытаюсь сделать следующее:
Создайте «большой» массив (1 000 000 + объектов) в общей памяти с помощью библиотеки boost::interprocess.
Мой код содержит следующее:
managed_shared_memory testarray(create_only, "Test", 45000000);
typedef std::pair<SingleField, uint32_t> TestType;
TestType * test = testarray.construct<TestType>("TestArray")[45000000];
У меня вопрос: как определить тип возвращаемого значения этой функции повышения?
Если я сделаю то же самое со следующим: SingleField вместо "::pair", это не сработает, но мне не нужен второй контейнер, мне нужен только один, но с одним он не работает!
Вывод eclipse для меня как-то слишком загадочен. Поскольку я работаю с boost, меня несколько раз останавливали из-за таких проблем, есть ли простой способ выяснить, какой «Тип» функция вернет? (Я пришел из Java, поэтому я привык иметь какое-то «простое» определение, в котором говорится Object x ). Я был бы действительно счастлив, если бы мог выяснить тип, который возвращает конкретная функция, со всеми функциями, которые я пишу для себя, это просто, но с этой библиотекой у меня проблемы.
Второй вопрос: почему эти примеры всегда с парой "тип", это предварительное условие библиотеки?
-> Я пытался использовать #include , Eclipse сообщает мне, что это std::pair Вопрос в том, почему это T* ? Это адрес начального сегмента?
Спасибо за ваше время и ответы.
Выход затмения:
Multiple markers at this line
- unused variable test
- cannot convert const
boost::interprocess::detail::named_proxy<boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, Field, false> to
SharedMemoryInitializer::Create()::TestType* in initialization
Я несколько раз читал руководства по библиотеке boost, возможно, я смотрю не на те сайты или страницы, и я был бы рад, если бы вы предоставили информацию, которую я пропустил.
decltype
илиstd::result_of
. См. здесь для получения дополнительной информации: stackoverflow.com/ вопросы/2689709/. - person void-pointer   schedule 08.04.2012-std=c++0x
, а также-std=c++11
в g++-4.7. - person void-pointer   schedule 08.04.2012g++-4.5
, я настоятельно рекомендую вам обновить ваш компилятор. Более поздние версии g++ поставляются с лучшими возможностями оптимизации, а новые функции C++11 действительно делают работу намного удобнее. Тем не менее, вы пробовали смотреть исходный код? - person void-pointer   schedule 08.04.2012