On 5/6/2015 7:25 AM, James Armstrong wrote:
I've given this a little more thought...So, I am not sure that generic algorithms like you suggest would be very beneficial. Ultimately, the type erased object are effectively pointers to memory in the heap. I'd think that any tangible benefit of allowing the user to choose their own container would be wiped out by the fact that the actual data is stored discontiguously out in the heap and you still need to dereference pointers to get to it. In this case, I think that defining the container but allowing the user to insert any datatype into natively would be more user friendly than allowing the use of any container but requiring the use of a type erased datatype. Also, to me it just feels 'cleaner' to call a method on the container rather than pass the container to a function. My current 2 cents
boost::variant (unlike boost::any) stores data by value. As to what "feels cleaner": a single algorithm function which accepts any sequence container (std::vector, std::array, std::list, std::forward_list, boost::circular_buffer, etc.) with any type erased or discriminated union objects (boost::any, boost::type_erasure::any, boost::variant, eggs::variant, etc.) or a single specialized container type mimicking behavior of vector<any>?