Hi Maxim,
> I think it would be great to make boost::any's memory allocation
> strategy for value holder customizable. It would allow to use not only
> global new operator, but any other special fast allocators like, for
> example, Loki::SmallObject.
>
> The changes are minor and would not break existing code.
>
> All it takes is to change class name and:
>
> struct use_default_allocator {};
>
> //class any
>
> template<class A = use_default_allocator> class any_ex
>
>
> And change any_cast functions appropriately.

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....

>
> I've measured performance using Intel VTune. The
> any_ex<Loki::SmallObject> was about twice as fast as any_ex<> with MS
> VC++ 7 and Intel C++ 7.

On what testcase? 

> So, the hardcoded memory allocation strategy makes more harm then good
> to boost::any. Changes would make boost::any more extensible and
> reusable.

Unless there's a way to convert between different any's, the idea is 
questionable. Say, a library uses 'any' in interface. It certainly uses
default allocator, and without conversion, will impose that default allocator 
on client code. IOW, you cannot write

   any<fast_allocator> a = some_lib::get_value("foo");

- Volodya

P.S. And, BTW, it would be great to see the complete code that you propose (or 
a diff to CVS HEAD).


_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to