Units of Measurement Library: units-d
ag0aep6g via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Fri Apr 1 12:03:03 PDT 2016
On 01.04.2016 01:58, Nordlöw wrote:
> https://github.com/nordlow/units-d
From there:
> * Example:
> * ---
> * alias BaseUnit!("Ampere", "A") Ampere;
> * enum ampere = Ampere.init;
> * // or
> * enum ampere = baseUnit!("Ampere", "A");
> * ---
I dislike that the type depends only on the given name. This effectively
means that the names are in a global namespace.
For example:
----
import experimental.units;
struct A
{
alias BaseUnit!("Ampere", "A") Ampere;
enum ampere = Ampere.init;
}
struct B
{
alias BaseUnit!("Ampere", "A") Ampere;
enum ampere = Ampere.init;
}
----
A.Ampere and B.Ampere are the same type here. I think it would be more
useful if they weren't. When two unrelated sources define a new unit
with the same name, then they shouldn't be compatible. Think of all the
different kinds of pounds and miles there used to be in the world.
I can't think of a truly nice way to accomplish this, though. As far as
I see, it needs a mixin of some kind.
Like this, for example:
----
enum string baseUnit = q{
{
static struct BaseUnit {/* ... */}
return BaseUnit.init;
}()
};
struct A
{
enum ampere = mixin(baseUnit);
}
struct B
{
enum ampere = mixin(baseUnit);
}
static assert(!is(typeof(A.ampere) == typeof(B.ampere)));
----
More information about the Digitalmars-d-announce
mailing list