On Mon, 24 Mar 2003, Vladimir Prus wrote: > Say, I have > > std::map<std::string, boost::any> values; > > Will I be able to write: > > any<fast_allocator> a; > values[10] = a; > > ? > IOW, I don't think your proposal provides any means to convert between 'any' > with different allocators. And I'm not sure you can easily achieve that....
Sure you can. You just store a copy of the allocator along with the data you are holding. The holders would look like this: struct holder_base { virtual ~holder_base() {}; virtual holder_base* clone() = 0; virtual void destroy() = 0; template<typename T, typename Allocator> struct holder : holder_base { holder(const T& value, const Allocator& allocator) : value(value), allocator(allocator) {} ~holder() {} virtual holder* clone() = 0 { holder* result = allocator.allocate(1); new (result) holder(value, allocator); return result; } virtual void destroy() = 0 { Allocator allocator(this->allocator); this->~holder(); allocator.deallocate(this); } }; This requires allocators to be CopyConstsructible, of course. Doug _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost