boost::unordered_map 使用 boost::interprocess::cached_node_allocator 编译失败
我正在尝试在 boost::interprocess::managed_shared_memory 段中创建 boost::unordered_map 。这工作正常,直到我尝试从使用 boost::interprocess::allocator 更改为 boost::interprocess::cached_node_allocator 。
看来 hash_bucket 结构推迟了密钥大小的计算,但 cached_node_allocator 在编译时需要该大小。关于如何实现这项工作有什么想法吗?
示例代码:
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/segment_manager.hpp>
#include <boost/interprocess/containers/string.hpp>
#include <boost/interprocess/allocators/cached_node_allocator.hpp>
#include <boost/unordered_map.hpp>
using namespace boost::interprocess;
int main ()
{
//Create shared memory.
managed_shared_memory segment(create_only,
"SharedMem", //segment name
65536);
// Define cached node allocator type for char in a shared memory segment.
typedef boost::interprocess::
cached_node_allocator<char,
managed_shared_memory::segment_manager> cached_node_allocator_t;
// Define an interprocess string type which uses the cached node allocator.
typedef boost::interprocess::
basic_string<char, std::char_traits<char>,
cached_node_allocator_t> shared_string_t;
// Get an instance of the allocator.
cached_node_allocator_t allocator_instance(
segment.get_segment_manager());
// Create an unordered map with Key and Value as interprocess strings,
// using the default hash and predicate and use the cached node allocator.
boost::unordered_map<shared_string_t, shared_string_t,
boost::hash<shared_string_t>,
std::equal_to<shared_string_t>,
cached_node_allocator_t> my_map_t(allocator_instance);
return 0;
}
GCC 输出:
$ g++ -I/opt/local/include cnasum.cc
/opt/local/include/boost/interprocess/allocators/detail/allocator_common.hpp: In instantiation of ‘const size_t boost::interprocess::sizeof_value<boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >::value’:
/opt/local/include/boost/interprocess/allocators/cached_node_allocator.hpp:104: instantiated from ‘boost::interprocess::cached_node_allocator<boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>’
/opt/local/include/boost/unordered/detail/fwd.hpp:134: instantiated from ‘boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
/opt/local/include/boost/unordered/detail/fwd.hpp:278: instantiated from ‘boost::unordered_detail::hash_iterator_base<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::unordered_detail::ungrouped>’
/opt/local/include/boost/unordered/detail/fwd.hpp:347: instantiated from ‘boost::unordered_detail::hash_buckets<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::unordered_detail::ungrouped>’
/opt/local/include/boost/unordered/detail/fwd.hpp:921: instantiated from ‘boost::unordered_detail::types<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::hash<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, std::equal_to<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::unordered_detail::map_extractor<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > > >, boost::unordered_detail::ungrouped>’
/opt/local/include/boost/unordered/detail/unique.hpp:125: instantiated from ‘boost::unordered_detail::map<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::hash<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, std::equal_to<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
/opt/local/include/boost/unordered/unordered_map.hpp:63: instantiated from ‘boost::unordered_map<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::hash<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, std::equal_to<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
cnasum.cc:35: instantiated from here
/opt/local/include/boost/interprocess/allocators/detail/allocator_common.hpp:43: error: invalid application of ‘sizeof’ to incomplete type ‘boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
$
I am trying to create a boost::unordered_map in a boost::interprocess::managed_shared_memory segment. This works fine until I try to change from using boost::interprocess::allocator to boost::interprocess::cached_node_allocator.
It seems that the hash_bucket structure is deferring the key size calculation, but the cached_node_allocator needs the size at compilation time. Any ideas on how to make this work?
Sample code:
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/segment_manager.hpp>
#include <boost/interprocess/containers/string.hpp>
#include <boost/interprocess/allocators/cached_node_allocator.hpp>
#include <boost/unordered_map.hpp>
using namespace boost::interprocess;
int main ()
{
//Create shared memory.
managed_shared_memory segment(create_only,
"SharedMem", //segment name
65536);
// Define cached node allocator type for char in a shared memory segment.
typedef boost::interprocess::
cached_node_allocator<char,
managed_shared_memory::segment_manager> cached_node_allocator_t;
// Define an interprocess string type which uses the cached node allocator.
typedef boost::interprocess::
basic_string<char, std::char_traits<char>,
cached_node_allocator_t> shared_string_t;
// Get an instance of the allocator.
cached_node_allocator_t allocator_instance(
segment.get_segment_manager());
// Create an unordered map with Key and Value as interprocess strings,
// using the default hash and predicate and use the cached node allocator.
boost::unordered_map<shared_string_t, shared_string_t,
boost::hash<shared_string_t>,
std::equal_to<shared_string_t>,
cached_node_allocator_t> my_map_t(allocator_instance);
return 0;
}
GCC output:
$ g++ -I/opt/local/include cnasum.cc
/opt/local/include/boost/interprocess/allocators/detail/allocator_common.hpp: In instantiation of ‘const size_t boost::interprocess::sizeof_value<boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >::value’:
/opt/local/include/boost/interprocess/allocators/cached_node_allocator.hpp:104: instantiated from ‘boost::interprocess::cached_node_allocator<boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>’
/opt/local/include/boost/unordered/detail/fwd.hpp:134: instantiated from ‘boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
/opt/local/include/boost/unordered/detail/fwd.hpp:278: instantiated from ‘boost::unordered_detail::hash_iterator_base<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::unordered_detail::ungrouped>’
/opt/local/include/boost/unordered/detail/fwd.hpp:347: instantiated from ‘boost::unordered_detail::hash_buckets<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::unordered_detail::ungrouped>’
/opt/local/include/boost/unordered/detail/fwd.hpp:921: instantiated from ‘boost::unordered_detail::types<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::hash<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, std::equal_to<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul>, boost::unordered_detail::map_extractor<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > > >, boost::unordered_detail::ungrouped>’
/opt/local/include/boost/unordered/detail/unique.hpp:125: instantiated from ‘boost::unordered_detail::map<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::hash<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, std::equal_to<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
/opt/local/include/boost/unordered/unordered_map.hpp:63: instantiated from ‘boost::unordered_map<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::hash<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, std::equal_to<boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
cnasum.cc:35: instantiated from here
/opt/local/include/boost/interprocess/allocators/detail/allocator_common.hpp:43: error: invalid application of ‘sizeof’ to incomplete type ‘boost::unordered_detail::hash_bucket<boost::interprocess::cached_node_allocator<std::pair<const boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >, boost::container::basic_string<char, std::char_traits<char>, boost::interprocess::cached_node_allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> > >, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0ul>, boost::interprocess::iset_index>, 64ul> >’
$
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
unordered_map
的构造函数必须采用几个参数:The constructor for the
unordered_map
has to take several parameters: