Boost logo

Boost :

From: Steven Watanabe (steven_at_[hidden])
Date: 2007-02-12 18:35:37


AMDG

Matthias Schabel <boost <at> schabel-family.org> writes:

> As Steven pointed out, this is not a detail - how would you write a
> template
> specialization of mpl::times<> that works for an arbitrary mpl::list?

Well, it is possible, but not a good idea.

template<>
struct mpl::times_impl<mpl::list0<>::tag, mpl::list0<>::tag> {
    template<class X, class Y>
    struct apply {
        //...
    };
};

>
> > quantity<SI::length> cent(cents);
> > cent = 2 * meters;
> > assert(cent.value() == 200);
>
> I have no idea what this means. Cents == centimeters? If so,
> centimeter is not an SI unit of length. And with no
> value, the first line doesn't give you a quantity anyway...

I see. What Noah is asking for is

template<class Unit, class T>
class quantity {
//...
private:
    T val_;
    T multiplier;
};

IMO, separating val_ into two factors
is not generally useful.

> > quantity<SI::length> unknown(user_unit);
> > unknown = 5 * meters;
> > quantity<SI::length> m(meters);
> > m = unknown;
> > assert(m.value() == 5);
> >
> > void f_cgs(quantity<CGS::length> l);
> > f_cgs(quantity_cast<CGS>(cent));
> >
> > The syntax is not necessarily what mcs does or would do but the
> > concepts
> > are what is important.
> >
> > It's been argued that this adds unnecessary complexity or would cause
> > inefficiencies. I don't agree.
>

It does add overhead -- about 2x. This may be
fine for many uses, but for some it would
be unacceptable.

In Christ,
Steven Watanabe


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk