Boost logo

Boost Users :

Subject: Re: [Boost-users] Problem with user defined Boost Units system
From: Michael Powell (mwpowellnm_at_[hidden])
Date: 2011-11-30 14:39:37


Sorry, yes.

My kernel of knowledge; the kitchen sink examples in the boost::units
documentation provides some good examples you can glean from. Also, review
the boost::units code itself. If you've got the boost library, then you've
got this code to review as well. That'd be my starting point, anyway.

HTH

On Wed, Nov 30, 2011 at 12:32 PM, Stephen Torri <stephen.torri_at_[hidden]>wrote:

> Michael,
>
> Thanks for responding. I agree that your logical step-wise progression
> is the correct way to go but it is not quite clear to me how to do it.
> Starting with dimensions I see I have the following:
>
> radii -> length
> radians -> angle
> minute -> time
> km -> length
>
> If we start with radii I was thinking what I did in my attachment,
> types.hpp, was correct for dimensions. Radii is a length so I used the
> length physical dimension class.
>
> Can you make changes to types.hpp for radii to show me what you mean
> in a step-by-step detail? I usually do very well if I have one example
> to work off when going on my own.
>
> Stephen
>
> On 11/30/11, Michael Powell <mwpowellnm_at_[hidden]> wrote:
> > When I got exposure to boost::units, or Units of Measure in general, it
> is
> > best to think of Dimensions first, line Length (L), Time (T), and so
> forth.
> > Then think of your units second. After that, values and calculations are
> of
> > a certain quantity.
> >
> > I might recommend you use the built-in velocity, or acceleration, as a
> > template for your radii / radian dimension.
> >
> > You will end up with something like this in your dimension type
> definition,
> > and forgive me the names aren't exact,
> >
> > //...
> > typedef boost::units:dimension<radii_dimension,1,radian_dimension,-1>
> > radii_radian_dimension;
> > //...
> > quantity<radii_t> my_radii;
> > quantity<radian_t> my_radian;
> > quantity<radii_radian_dimension> result = my_radii / my_radian;
> > //...
> >
> > I think what you're missing are the quantity<>'s involved. In other
> words,
> > you can't just go from unit (or dimension) to value; you have to run that
> > through quantity<> to do anything useful with it.
> >
> > The kitchen sink examples are pretty good to learn from.
> >
> > After that, however, I find the compile-time safety to be quite
> attractive.
> >
> > HTH
> >
> > On Wed, Nov 30, 2011 at 9:49 AM, Stephen Torri
> > <stephen.torri_at_[hidden]>wrote:
> >
> >> I am using Boost 1.45 and trying to use Boost Units to map the types
> >> of astrodynamic equation variables. I am getting an error with the
> >> following equation. The error is saying that the lvalue type for
> >> k2_divded_by_semi_major is wrong.
> >>
> >> The questions I have are:
> >>
> >> Q1: Did I defined my system correctly? (System file is attached -
> >> types.hpp)
> >>
> >> Q2: How do I define ratio in the system? For example I have some
> >> constants that define a conversion (1 earth radii = 6378 km).
> >>
> >> Q3: How do I define a variable type if its a fraction (e.g. radii /
> radian
> >> )?
> >>
> >> ---- EQUATION ----
> >>
> >> sgp4::types::radii_t k2_divided_by_semi_major = m_k2 / pow<2> (
> semi_major
> >> );
> >>
> >> The types of variables are:
> >>
> >> m_k2 sgp4::types::radii_t
> >> semi_major sgp4::types::radian_t
> >>
> >> ---- ERROR ----
> >>
> >> 1> [
> >> 1>
> >>
> >>
> Unit=boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension,boost::units::static_rational<-1>>,boost::units::detail::merge_dimensions_impl<0,0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>,boost::units::homogeneous_system<boost::units::list<sgp4::types::radii_base_unit,boost::units::list<sgp4::types::radian_base_unit,boost::units::dimensionless_type>>>>,
> >> 1> Y=double
> >> 1> ]
> >> 1> and
> >> 1> [
> >> 1> Unit=sgp4::types::sgp4_length_t,
> >> 1> Y=double
> >> 1> ]
> >> 1> Constructor for class 'boost::units::quantity<Unit,Y>' is
> >> declared 'explicit'
> >> 1> with
> >> 1> [
> >> 1> Unit=sgp4::types::sgp4_length_t,
> >> 1> Y=double
> >> 1> ]
> >>
> >> Regards,
> >>
> >> Stephen
> >>
> >> _______________________________________________
> >> Boost-users mailing list
> >> Boost-users_at_[hidden]
> >> http://lists.boost.org/mailman/listinfo.cgi/boost-users
> >>
> >
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net