
Thorsten Ottosen wrote:
Hi Ion,
Some of my students tried to use boost::circular_buffer with Boost.Interprocess allocators. Apparently the docs does not mention circular_buffer as one that is compatible with Boost.Interproccess.
I had never tested this and I've just tried to do an small example that does not compile.
What do we need to do to make a container that support the special allocators?
Change the code to avoid assuming allocator::pointer is T*. This is usually easy but tedious (replace raw pointer declarations with typedefs that come from the allocator, change some calls that need raw pointers (ptr), with "&*ptr" and similar...). The easiest way is to instantiate the container with a shared memory allocator and start "fixing" code....
In particular, if I want to use boost::ptr_vector, then do I need to have stateful allocators (both the normal container allocator, and the clone_allocator)?
Sorry, I'm not familiar with ptr_containers. If you can give me some hints on what's clone_allocator for, I'll be glad to help you to make ptr_container compatible with shared memory allocators. Just one issue: shared memory does not support virtual functions, so I don't think polymorphic cloning will be usable at all. Joaquín has successfully changed multiindex code to support Interprocess so maybe he knows better than anyone what's the best way to make an existing container compatible with Interprocess. For std-like containers changing pointer declarations and replacing some calls was enough. Regards, Ion