Corrado Zoccolo | 2 Feb 14:04

Re: [flyweight] Review period extended to February 3

Sorry, I hit the send button before finishing.

On Feb 2, 2008 1:51 PM, Corrado Zoccolo <czoccolo <at> gmail.com> wrote:

> Hi Joaquin
>
>
> On Feb 2, 2008 12:57 PM, "JOAQUIN LOPEZ MU?Z" <joaquin <at> tid.es> wrote:
>
> >
> >  2. Indeed GoF introduces a key type K into the pattern that
> >  is used to retrieve the actual values of T. So, we have
> >  a one-to-one relation K-->T, i.e. there exists a stateless
> >  function f of the form
> >
> >    T f(const K&);
> >
> >  that can be used to construct a T from a given K. And,
> >  additionally, K is cheaper to construct than T. This is
> >  the map approach, right? My question now is: is this a realistic
> >  scenario? If K is actually cheaper to construct than T and
> >  we can univocally get the associated T from any K, why work
> >  with Ts and not just use Ks in the first place? The only
> >  plaussible justifications I can think of is that f() is
> >  computationally expensive or that T is more convenient to
> >  work with than K, but these seem (to me) not so likely
> >  concerns --more on the second concern on point 3 below, though.
> >  Note that I explicitly observed that f must be *stateless*, i.e.
> >  a K object contains exactly the same information as its associated
> >  T value. This is not the case in most usages of std::map, which
> >  is a reason why std::maps are useful :)
> >  I am not plainly denying the existence of sensible K-->T
> >  scenarios, but I thought long and hard and couldn't find
> >  any. If you can come up with one I'll be happy to know.
> >  So, my analysis led me to conclude that the right approach
> >  is to assume that K==T, that is, the set approach, or at
> >  most than K and T are just different representations of the
> >  same information.
> >
>
> One example for all:
> K = const char *
> T = std::string
>
> I have seen many of those examples in which an object is actually built
> from something simpler (in all the cases f will be a one-argument,
> non-explicit constructor T(K) ).
>
> What about defining a trait, construction_arg<T>::type that can give K in
> such cases, and T if not specified?
> It could be generally useful also in other cases, expecially in the
> transition phase, in which we still lack r-value references.
>

Clearly, you don't want to store the Ks in the container, exactly for the
same reason you want to use T in your code, so you should still have
something like a set<T> as a container, and have some way to look for a K
inside it without creating a T.

For example, for std::string we have overloaded  operator< that also accept
(const char *). Something equivalent could be obtained maybe with a custom
comparator?

Corrado
>
> --
> __________________________________________________________________________
>
> dott. Corrado Zoccolo                          mailto:zoccolo <at> di.unipi.it
> PhD - Department of Computer Science - University of Pisa, Italy
> --------------------------------------------------------------------------
> The self-confidence of a warrior is not the self-confidence of the average
> man. The average man seeks certainty in the eyes of the onlooker and calls
> that self-confidence. The warrior seeks impeccability in his own eyes and
> calls that humbleness.
>                               Tales of Power - C. Castaneda
>
>

--

-- 
__________________________________________________________________________

dott. Corrado Zoccolo                          mailto:zoccolo <at> di.unipi.it
PhD - Department of Computer Science - University of Pisa, Italy
--------------------------------------------------------------------------
The self-confidence of a warrior is not the self-confidence of the average
man. The average man seeks certainty in the eyes of the onlooker and calls
that self-confidence. The warrior seeks impeccability in his own eyes and
calls that humbleness.
                              Tales of Power - C. Castaneda
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Gmane