Overloading opEquals(T)(T y)

spir denis.spir at gmail.com
Tue Feb 8 07:52:35 PST 2011


On 02/08/2011 12:16 AM, bearophile wrote:
> Charles McAnany:
>
>> Hi, all. So I'm trying to make a BigRational struct, to get more comfortable
>> with D.
>
> I suggest to ask similar questions in the D.learn newsgroup.
>
>
>> bool opEquals(Tdummy = void)(BigRational y){
>> 	auto temp = this-y;
>> 	if (temp.numerator == 0)
>> 	return true;
>> 	return false;
>> }
>>
>> bool opEquals(T)(T y){
>> 	return this == BigRational(y);
>> }
>>
>> But this is an ambiguity error.
>
> One possible solution:
>
> bool opEquals(T)(T y) if (is(T == BigRational)) { ... }
> bool opEquals(T)(T y) if (!is(T == BigRational)) { ... }
>
>
> Another solution:
>
> bool opEquals(T)(T y) {
>      static if (is(T == BigRational)) {
>          // ...
>      } else {
>          // ...
>      }
> }
>
> Bye,
> bearophile

I just thought at this alternative between a constraint and a static if a few 
hours ago. In which case, and according to which reasoning, would one choose 
one or the other? (I chose static if only for the very bad reason I can hardly 
stand is().)

Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d mailing list