Po-Chun wrote:
I am a new user and try to write some codes with shared memory using
boost.interprocess.
Basically, I followed the examples and the allocation seems fine. But
the use of shared-memory container gave me a bunch of error messages
related to
"instantiated from here." during compile. The error seems related to
the template.
But I have no idea how to fix it yet. Any suggestion would be helpful.
Thanks.
set's constructor is equal to std::constructor, but you must pay more
attention because it needs an allocator and set's constructor taking the
allocator takes also the comparison option. You have several C++ errors
in your code (set's template arguments are not correct, for example).
This should compile fine:
#include
#include
#include
#include
#include <functional>
#include <utility>
struct LongIntLess
{
bool operator()(const boost::uint64_t a, const boost::uint64_t b) const
{
return a < b;
}
};
int main ()
{
using namespace boost::interprocess;
try{
shared_memory_object::remove("SharedMemory");
managed_shared_memory segment
(create_only, "SharedMemory", sizeof(boost::uint64_t)*200);
typedef allocator< boost::uint64_t,
managed_shared_memory::segment_manager>
shmAllocator_t;
typedef set shrSet_t;
const shmAllocator_t alloc_inst (segment.get_segment_manager());
shrSet_t *WrSet_1;
WrSet_1 = segment.construct ("shrSet_t")
(LongIntLess(), alloc_inst);
WrSet_1->insert(2);
} catch (...){
shared_memory_object::remove("SharedMemory");
throw;
}
shared_memory_object::remove("SharedMemory");
}
Ion