Is there a way to remove the requirement for parenthesis?

Charles Hixson charleshixsn at earthlink.net
Wed Jan 28 18:17:12 PST 2009


Daniel Keep wrote:
> 
> Charles Hixson wrote:
>> Suppose that you have four types, equivalent to, say, float.
>> Call one of them Horiz, one Vertic, one Radians, and one Radius.
>> These are all floats, but when you specify, say,
>> float dist (Horiz x, Vert y)
>> {  return sqrt(x * x + y * y);  }
>> It's important that the arguments aren't Radius and Radians.  Or Horiz
>> and Horiz.
>>
>> [snip]
> 
> There's no problem with that: make them structs that implement the
> appropriate operators.
> 
> See, what I don't get (note: this is how I perceive it) is the desire to
> have this sort of type protection, but require the compiler to somehow
> be psychic in order to know when and where you don't care and throw it away.
> 
> You either have distinct types that aren't automatically compatible, or
> you don't.
> 
>   -- Daniel

No such requirement.  If it's based on a type, then it can be used as 
that type.  But the converse shouldn't be true.  I.e., in the example it 
should require extra effort to use a float where a Horiz was requested. 
  (Cast would reasonably be required here.)  But to use a Horiz as a 
float should be trivial.

Actually, typedef almost works for this.  The problem is that if, e.g., 
one defines
typedef	uint  MyType;
and then does
writef (MyType);
the compiler asks whether I mean to use a byte or a ulong.  It doesn't 
automatically realize that the appropriate type is uint.
(Again, this is D2.023 on Linux.)



More information about the Digitalmars-d-learn mailing list