From: Dmitry A. Kazakov <mailbox@dmitry-kazakov.de>
Subject: Re: Announce: Grace project site operational
Date: Wed, 15 May 2002 10:17:52 +0200
Date: 2002-05-15T10:17:52+02:00 [thread overview]
Message-ID: <2s44eu0fm4g6606h9p4stb1b5oc0nmg5u8@4ax.com> (raw)
In-Reply-To: 3CE15D0A.3050100@mail.com
On Tue, 14 May 2002 14:52:58 -0400, Hyman Rosen <hyrosen@mail.com>
wrote:
>Time for me to bring up my usual post about units in C++,
>which can be done with complete type safety and with no
>run-time overhead in time or storage, because of C++'s
>automatic instantiation rules.
The same could be achieved without templates if there were a way to
ensure that a user-defined subroutine is compile-time and known type
discriminants / tags are removed [*]. I believe that an improvement of
Ada's ADT/OO gears is much more important than any investments in
inherently flawed generics-templates-macros.
Generally, I dislike any type-based solution of the unit problem. I
believe that the right way is a subtype-based, OO-ish one. Whether the
dimension be a discriminant or tag [**] is no matter. There must be a
way to write class-wide subroutines for dimensioned values. Any
type-based solution lacks that without any hope.
[*] Well, there is a performance problem with tagged types which were
unnecessarily forced to be always by-reference.
[**] Here I consider derived tagged types "subtypes".
>Here's the simplified
>example involving only mass, distance, and time. The code
>allows only like units to be added or subtracted, but
>arbitrary units to be multiplied or divided, with the
>correctly typed result. Constants are units with all
>paremeters set to zero. All the verbiage is for types;
>the actual storage for each unit object is just the
>value, and all type correctness is checked at compile
>time, not run time. The correctly typed operators are
>automatically instantiated when used, without manual
>intervention.
>
>I first saw this idiom in _Scientific and Engineering C++_
>by Bartion & Nackman.
>
>template<typename RepType, int Mass, int Distance, int Time>
>struct Unit
>{
> RepType value;
> explicit Unit(value) : value(value) { }
A small correction. The above should be:
explicit Unit(RepType value) : value(value) {}
> Unit operator+(Unit other)
> { return Unit(value + other.value); }
> Unit operator-(Unit other)
> { return Unit(value - other.value); }
>};
>
>template<typename RepType,
> int MassL, int DistanceL, int TimeL,
> int MassR, int DistanceR, int TimeR>
>Unit<RepType,
> MassL + MassR,
> DistanceL + DistanceR,
> TimeL + TimeR>
>operator*(Unit<RepType, MassL, DistanceL, TimeL> l,
> Unit<RepType, MassR, DistanceR, TimeR> r)
>{
> return Unit<RepType,
> MassL + MassR,
> DistanceL + DistanceR,
> TimeL + TimeR>(l.value * r.value);
>}
>
>template<typename RepType,
> int MassL, int DistanceL, int TimeL,
> int MassR, int DistanceR, int TimeR>
>Unit<RepType,
> MassL - MassR,
> DistanceL - DistanceR,
> TimeL - TimeR>
>operator/(Unit<RepType, MassL, DistanceL, TimeL> l,
> Unit<RepType, MassR, DistanceR, TimeR> r)
>{
> return Unit<RepType,
> MassL - MassR,
> DistanceL - DistanceR,
> TimeL - TimeR>(l.value / r.value);
>}
>
>typedef Unit<double, 0, 1, -1> Velocity;
>typedef Unit<double, 0, 1, -2> Acceleration;
>typedef Unit<double, 1, 2, -2> Energy;
>typedef Unit<double, 0, 0, -1> Herz;
>// etc.
As always with C++, the above does not work with MS-VC++, but it does
work with gcc. Diagnostics in case of a unit error is a mess, as
expected. (:-))
---
Regards,
Dmitry Kazakov
www.dmitry-kazakov.de
next prev parent reply other threads:[~2002-05-15 8:17 UTC|newest]
Thread overview: 158+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-05-08 2:38 Announce: Grace project site operational Ted Dennison
2002-05-08 2:48 ` Larry Kilgallen
2002-05-08 12:46 ` Ted Dennison
2002-05-08 13:33 ` Marin David Condic
2002-05-09 19:54 ` Randy Brukardt
2002-05-09 20:22 ` Marin David Condic
2002-05-10 14:59 ` Ted Dennison
2002-05-10 18:54 ` Randy Brukardt
2002-05-10 14:17 ` Larry Hazel
2002-05-10 14:46 ` David C. Hoos
2002-05-10 15:38 ` Marin David Condic
2002-05-11 14:17 ` Preben Randhol
2002-05-11 16:58 ` martin.m.dowie
2002-05-11 18:55 ` William C. Brennan
2002-05-11 20:10 ` Preben Randhol
2002-05-12 8:53 ` martin.m.dowie
2002-05-13 13:18 ` Marin David Condic
2002-05-13 13:07 ` Marin David Condic
2002-05-14 15:18 ` Ted Dennison
2002-05-14 15:45 ` Marin David Condic
2002-05-15 19:56 ` Hyman Rosen
2002-05-16 13:44 ` Stephen Leake
2002-05-14 17:02 ` Martin Dowie
2002-05-15 14:57 ` Ted Dennison
2002-05-15 15:31 ` Marin David Condic
2002-05-16 21:57 ` tmoran
2002-05-17 1:55 ` tmoran
2002-05-17 13:12 ` Marin David Condic
2002-05-18 1:44 ` tmoran
2002-05-15 15:54 ` Martin Dowie
2002-05-15 17:33 ` Larry Kilgallen
2002-05-15 17:04 ` David C. Hoos
2002-05-15 22:59 ` tmoran
2002-05-16 13:36 ` Marin David Condic
2002-05-16 13:43 ` Ted Dennison
2002-05-16 14:51 ` Marin David Condic
2002-05-17 15:34 ` Stephen Leake
2002-05-20 13:47 ` Marin David Condic
2002-05-21 14:23 ` Stephen Leake
2002-05-21 17:24 ` Ted Dennison
2002-05-21 17:52 ` Marin David Condic
2002-05-22 16:20 ` Stephen Leake
2002-05-28 8:22 ` Martin Dowie
2002-05-22 16:16 ` Stephen Leake
2002-05-16 11:06 ` John English
2002-05-16 13:52 ` Stephen Leake
2002-05-16 16:40 ` Hyman Rosen
2002-05-14 17:50 ` tmoran
2002-05-14 18:07 ` Preben Randhol
2002-05-14 18:12 ` Preben Randhol
2002-05-14 18:52 ` Hyman Rosen
2002-05-15 8:17 ` Dmitry A. Kazakov [this message]
2002-05-15 18:30 ` Hyman Rosen
2002-05-16 9:16 ` Dmitry A. Kazakov
2002-05-16 19:42 ` Hyman Rosen
2002-05-17 8:35 ` Dmitry A. Kazakov
2002-05-20 17:08 ` Hyman Rosen
2002-05-21 8:34 ` Dmitry A. Kazakov
2002-05-21 15:57 ` Hyman Rosen
2002-05-22 7:48 ` Dmitry A. Kazakov
2002-05-22 11:40 ` Georg Bauhaus
2002-05-22 15:05 ` Dmitry A. Kazakov
2002-05-22 16:14 ` Georg Bauhaus
2002-05-22 16:31 ` Hyman Rosen
2002-05-23 11:40 ` Dmitry A. Kazakov
2002-05-15 8:44 ` Martin Dowie
2002-05-15 18:15 ` Stephen Leake
2002-05-15 18:39 ` Darren New
2002-05-15 19:34 ` Hyman Rosen
2002-05-15 23:52 ` Darren New
2002-05-16 7:39 ` Hyman Rosen
2002-05-16 15:35 ` Darren New
2002-05-16 17:55 ` Brian Rogoff
2002-05-16 13:35 ` Stephen Leake
2002-05-16 15:50 ` Darren New
2002-05-16 16:28 ` Hyman Rosen
2002-05-17 15:14 ` Stephen Leake
2002-05-17 16:08 ` Darren New
2002-05-17 16:41 ` Fraser Wilson
2002-05-17 16:43 ` Stephen Leake
2002-05-17 16:24 ` Marin David Condic
2002-05-17 15:03 ` Fraser Wilson
2002-05-17 15:27 ` Stephen Leake
2002-05-17 16:20 ` Fraser Wilson
2002-05-17 16:46 ` Stephen Leake
2002-05-18 6:14 ` Simon Wright
2002-05-17 15:44 ` Mark Biggar
2002-05-17 16:09 ` Fraser Wilson
2002-05-17 16:48 ` Stephen Leake
2002-05-17 21:11 ` Mark Biggar
2002-05-21 8:45 ` Dmitry A. Kazakov
2002-05-15 19:24 ` Hyman Rosen
2002-05-15 23:33 ` tmoran
2002-05-16 13:48 ` Stephen Leake
2002-05-16 14:39 ` Martin Dowie
2002-05-14 19:10 ` tmoran
2002-05-14 19:58 ` Preben Randhol
2002-05-11 19:42 ` Jeffrey Carter
2002-05-11 20:16 ` Preben Randhol
2002-05-11 19:49 ` Jeffrey Carter
2002-05-13 15:44 ` Ted Dennison
2002-05-13 16:16 ` Marin David Condic
2002-05-13 17:10 ` Stephen Leake
2002-05-13 19:07 ` Preben Randhol
2002-05-13 20:21 ` Marin David Condic
2002-05-14 15:00 ` Ted Dennison
2002-05-14 16:00 ` Stephen Leake
2002-05-14 16:30 ` Preben Randhol
2002-05-13 19:16 ` Jeffrey Carter
2002-05-13 19:19 ` Simon Wright
2002-05-11 1:23 ` Richard Riehle
2002-05-11 12:27 ` Marc A. Criley
2002-05-08 16:12 ` Hyman Rosen
2002-05-08 16:31 ` Larry Kilgallen
2002-05-08 17:16 ` Marin David Condic
2002-05-09 9:50 ` Larry Kilgallen
2002-05-09 13:32 ` Marin David Condic
2002-05-09 13:54 ` Ted Dennison
2002-05-09 14:23 ` Mário Amado Alves
2002-05-09 20:02 ` Randy Brukardt
2002-05-09 20:44 ` Marin David Condic
2002-05-10 13:06 ` Hyman Rosen
2002-05-10 16:23 ` Preben Randhol
2002-05-10 18:57 ` Hyman Rosen
2002-05-10 18:58 ` Randy Brukardt
2002-05-10 8:35 ` Dmitry A. Kazakov
2002-05-10 9:12 ` GRACE web site (was Announce: Grace project site operationa)l David C. Hoos, Sr.
2002-05-10 14:33 ` Ted Dennison
2002-05-10 16:17 ` Preben Randhol
2002-05-13 14:07 ` Ted Dennison
2002-05-13 16:04 ` Darren New
2002-05-10 19:00 ` Announce: Grace project site operational Randy Brukardt
2002-05-13 8:10 ` Dmitry A. Kazakov
2002-05-10 19:35 ` Ted Dennison
2002-05-13 8:01 ` Dmitry A. Kazakov
2002-05-10 10:25 ` Mário Amado Alves
2002-05-09 20:53 ` Simon Wright
2002-05-10 8:29 ` Dmitry A. Kazakov
2002-05-14 15:03 ` John English
2002-05-15 8:34 ` Dmitry A. Kazakov
2002-05-15 10:38 ` John English
2002-05-15 11:18 ` Dmitry A. Kazakov
2002-05-15 18:10 ` Stephen Leake
2002-05-09 14:03 ` Wes Groleau
2002-05-09 15:38 ` Marin David Condic
2002-05-11 18:10 ` William C. Brennan
2002-05-08 22:00 ` Ted Dennison
2002-05-09 5:39 ` Hyman Rosen
2002-05-09 14:21 ` Wes Groleau
2002-05-25 22:03 ` Robert I. Eachus
2002-05-08 14:32 ` Stephen Leake
2002-05-10 14:46 ` Ted Dennison
2002-05-10 7:47 ` fraser
2002-05-10 14:55 ` Ted Dennison
-- strict thread matches above, loose matches on Subject: below --
2002-05-15 9:58 Grein, Christoph
2002-05-15 16:12 ` Ted Dennison
2002-05-15 11:32 Grein, Christoph
2002-05-15 13:41 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox