|
Boost Users : |
Subject: [Boost-users] [interprocess] set doesn't work when key_type is pointer.
From: skywalker (ytj000_at_[hidden])
Date: 2011-03-26 10:13:14
Hello all,
It seems that boost::interprocess::set won't compile if the key_type is pointer.
However, bip::vector or std::set works fine.
I'm using g++ 4.5.2 and boost 1.46.0 with linux 2.6.37.
Here is my code:
// compile command: g++ a.cpp -lboost_thread
namespace bip = boost::interprocess;
struct comp {
template<class Pointer>
bool operator()(Pointer a, Pointer b) const {
return *a < *b;
}
bool operator()(int a, int b) const {
return a < b;
}
};
typedef bip::managed_mapped_file::segment_manager segment_manager_t;
#define fset(value_t) \
bip::set<value_t, comp, bip::allocator<value_t, segment_manager_t> >
bip::managed_mapped_file
managed_shm(bip::open_or_create, "/tmp/bip_test", 1024);
void bip_example()
{
fset(int*) s(comp(), managed_shm.get_segment_manager());
s.insert(new int (7)); ///< error: key_type can't be pointer in bip.
fset(int) s2(comp(), managed_shm.get_segment_manager());
s2.insert(int (7)); ///< ok: non-pointer is accepted.
std::set<int*, comp> s3;
s3.insert(new int (7));
///< ok: int* works with STL, as well as shared_ptr, offset_ptr.
}
void more_example()
{
typedef bip::offset_ptr<int> optr;
fset(optr) s3(comp(), managed_shm.get_segment_manager());
bip::allocator<int, segment_manager_t>
alloc_int = managed_shm.get_segment_manager();
optr p = alloc_int.allocate(1);
alloc_int.construct(p, 7);
s3.insert(p); ///< error: bip doesn't work with offset_ptr too.
typedef boost::shared_ptr<int> sptr;
fset(sptr) s4(comp(), managed_shm.get_segment_manager());
s4.insert(sptr(new int(7))); ///< ok: shared_ptr works fine.
}
Won't that fail to compile, or am I missing something?
Regards,
Tianjiao
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net