Resolving conflicting functions

BCS ao at pathlink.com
Mon Dec 3 16:57:59 PST 2007


Reply to Derek,

> I have a Currency data type,based on a struct.
> 
> I want to divide a Currency value by a scalar to return a Currency and
> I want to divide a Currency value by another Currency value to return
> a scalar. This below is my attempt but fails to compile. How does one
> do this?
> 
> // ------------------------
> real opDiv(Currency pFactor)
> // ------------------------
> {
> return mData / pFactor.mData;
> }
> // ------------------------
> Currency opDiv(T)(T pFactor)
> // ------------------------
> {
> Currency temp;
> temp = this.mData / pFactor;
> 
> return temp;
> }
> I get the message ...
> 
> template Currency.opDiv(T) conflicts with function Currency.opDiv
> 

you can't have a template and non-template by the same name

here is the nasty solution, ther might be a better one, but this should work.

// ------------------------
Ret!(T) opDiv(T)(T pFactor)
// ------------------------
{
  Ret!(T) temp;
  static if(is(T == Currency))
    temp =  mData / pFactor.mData;
  else
    temp = this.mData / pFactor;

  return temp;
}




More information about the Digitalmars-d-learn mailing list