
#include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/allocator.hpp> #include <boost/interprocess/containers/map.hpp> How to convert std::string into boost string. I am doing some benchmarking by inserting the std::string value instead of char_string(ypedef of basic_string) but i am getting error message. #include <boost/interprocess/containers/vector.hpp> #include <boost/interprocess/containers/string.hpp> #include <iostream> using namespace boost::interprocess; //Typedefs of allocators and containers typedef managed_shared_memory::segment_manager segment_manager_t; typedef allocator<void, segment_manager_t> void_allocator; typedef allocator<int, segment_manager_t> int_allocator; typedef vector<int, int_allocator> int_vector; typedef allocator<int_vector, segment_manager_t> int_vector_allocator; typedef vector<int_vector, int_vector_allocator> int_vector_vector; typedef allocator<char, segment_manager_t> char_allocator; typedef basic_string<char, std::char_traits<char>, char_allocator> char_string; class complex_data { int id_; char_string char_string_; int_vector_vector int_vector_vector_; public: //Since void_allocator is convertible to any other allocator<T>, we can simplify //the initialization taking just one allocator for all inner containers. complex_data(int id, const char *name, const void_allocator &void_alloc) : id_(id), char_string_(name, void_alloc), int_vector_vector_(void_alloc) {} //Other members... }; //Definition of the map holding a string as key and complex_data as mapped type typedef std::pair<const char_string, int> map_value_type; typedef std::pair<char_string, int> movable_to_map_value_type; typedef allocator<map_value_type, segment_manager_t> map_value_type_allocator; typedef map< char_string, int , std::less<char_string>, map_value_type_allocator> complex_map_type; int main () { //Remove shared memory on construction and destruction struct shm_remove { shm_remove() { shared_memory_object::remove("MySharedMemory"); } ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); } } remover; //Create shared memory managed_shared_memory segment(create_only,"MySharedMemory", 65536); //An allocator convertible to any allocator<T, segment_manager_t> type void_allocator alloc_inst (segment.get_segment_manager()); //Construct the shared memory map and fill it complex_map_type *mymap = segment.construct<complex_map_type> //(object name), (first ctor parameter, second ctor parameter) ("MyMap")(std::less<char_string>(), alloc_inst); string s = "hello"; char y = (char_string)s; for(int i = 0; i < 100; ++i) { char_string key_object(alloc_inst); map_value_type value(key_object, i); mymap->insert(value); } return 0; } error: no matching function for call to ‘boost::interprocess_container::basic_string<char, std::char_traits<char>, boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index>
::basic_string(boost::interprocess_container::string&)’ /usr/include/boost/interprocess/containers/container/string.hpp:591: note: candidates are: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(typename A::size_type, CharT, const A&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ] /usr/include/boost/interprocess/containers/container/string.hpp:584: note: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(const CharT*, const A&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ] /usr/include/boost/interprocess/containers/container/string.hpp:577: note: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(const CharT*, typename A::size_type, const A&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ] /usr/include/boost/interprocess/containers/container/string.hpp:564: note: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(const boost::interprocess_container::basic_string<CharT, Traits, Alloc>&, typename A::size_type, typename A::size_type, const A&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ] /usr/include/boost/interprocess/containers/container/string.hpp:557: note: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(boost::interprocess::rv<boost::interprocess_container::basic_string<CharT, Traits, Alloc> >&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ] /usr/include/boost/interprocess/containers/container/string.hpp:548: note: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(const boost::interprocess_container::basic_string<CharT, Traits, Alloc>&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ] /usr/include/boost/interprocess/containers/container/string.hpp:539: note: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(const A&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ] /usr/include/boost/interprocess/containers/container/string.hpp:532: note: boost::interprocess_container::basic_string<CharT, Traits, Alloc>::basic_string(boost::interprocess_container::basic_string<CharT, Traits, Alloc>::reserve_t, size_t, const A&) [with CharT = char, Traits = std::char_traits<char>, A = boost::interprocess::allocator<char, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> ]
Thanks in advance. -- View this message in context: http://www.nabble.com/How-to-convert-std%3A%3Astring-into-basic_string-tp254... Sent from the Boost - Users mailing list archive at Nabble.com.