|
Boost : |
From: Jonathan Turkanis (technews_at_[hidden])
Date: 2004-08-16 01:30:57
Sorry to join the discussion late. ... Here are my thoughts:
------------------
"David Abrahams" <dave_at_[hidden]> wrote:
> We chose "iterator_value" et al because we couldn't be sure that
> someone wouldn't need to make another concept Q in boost that had
its
> own, separate notion of an value_type. If you then had a type X
that
> fulfilled both the Iterator and Q concepts, how would you specialize
> value_type_of?
There could be trouble even if no type fulfills both concepts: in
general, it may not be possible for the two concepts to share a single
default implementation of the metafunction. That does not seem to be a
problem in the current case, however.
------------------
"Thorsten Ottosen" <nesotto_at_[hidden]> wrote in message:
> "David Abrahams" <dave_at_[hidden]> wrote:
> |
> | boost::iterators::value<I>::type
> | boost::iterators::reference<I>::type
> |
> | boost::ranges::value<R>::type
> |
> | and so forth?
>
> good idea to rename value_type<I>::type value<T>::type :-)
> I guess we should do that with
>
> range::size<R>::type
> range::difference<R>::type
I don't like dropping the '_type' here -- One of the main advantages
of a naming convention is that you can figure out what the name should
be without consulting the docs. Consider a nearly identical situation
in my iostreams library (to be reviwed later this month). Instead of
typename Source::char_type
I use
boost::io::char_type<Source>::type
If we were to drop the '_type' we would have boost::io::char, which is
illegal. Same for int_type. Of course, the convention could be to keep
'_type' if necessary, or to use a trailing underscore, but I'd rather
have the easy-to-remember convention that the metafunction has the
same name as the traditional nested type.
"Thorsten Ottosen" <nesotto_at_[hidden]> wrote in message:
> I'm feeling less and less comfortable with the namespace version.
Shorter names don't seem to be an issue.
Yes.
> Namespaces on concepts seems to be an issue.
Namespaces on a concept don't bother me at all. For each of a
concept's associated types -- when possible -- there should be an
official metafunction defining the association. This metafunction has
to be in *some* namespace or other.
> We cannot use the same namespace for size as a function and
metafuntion
> nor bring them into the same scope.
Yes, but I believe you should use 'size_type' instead.
> The smallest change is not to change the iterator library and
therefore I will
> use the prefix range_ for my metafunctions unless there are heavy
objections.
I think range_xxx and ranges::xxx are about equally good. I don't
really like the convention of forming namespace names by adding 's' --
although I don't have a better idea -- so perhaps I'd choose
range_xxx.
Jonathan
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk