[C++-sig] Re: Adding __len__ to range objects
David Abrahams
dave at boost-consulting.com
Wed Sep 10 16:21:14 CEST 2003
Raoul Gough <RaoulGough at yahoo.co.uk> writes:
> David Abrahams <dave at boost-consulting.com> writes:
>
>> Raoul Gough <RaoulGough at yahoo.co.uk> writes:
>>
>>>
>>> I see. Unless there is some kind of template meta-programming magic to
>>> detect operator==, we would need a manual switch. Maybe we could break
>>> this down by introducing not only a container_traits template, but a
>>> value_traits one as well. The container_traits could then make use of
>>> value_traits<container::value_type> internally to figure out whether
>>> things like find() are possible, and the client code could specialize
>>> value_traits where necessary. In most cases, of course, the defaults
>>> would work, but in special cases only minimal work is required for the
>>> client code, since value_traits would probably be very simple.
>>
>> Yup. This is all starting to sound a lot like Alexander Nasonov's
>> dynamic_any.
>
> I've just had a quick look at dynamic_any, and it looks like it does
> provide similar proxying features. Were you thinking that we could
> use it in our implementation?
Nope; just noting that there are some similar problems.
> I wonder whether dynamic_any could be refactored to separate the
> proxying and the "any object holder" facilities? Maybe a smart
> reference that handles function forwarding could be treated as a
> separate facility of its own, something like boost::shared_ptr except
> that it pretends to *be* the referant object, instead of like a
> pointer to it. This is essentially what the element_proxy has to do
> for the indexing suite, except that it's currently all hard-coded.
>
> For the moment, I prefer the traits approach rather than the typelist
> that dynamic_any seems to use.
Yeah; traits would let you draw conclusions about known (std)
containers without help from the user.
> In any case, we would still need some kind of decision facility to
> figure out whether to .def("find"), for example.
Yep.
--
Dave Abrahams
Boost Consulting
www.boost-consulting.com
More information about the Cplusplus-sig
mailing list