Problems instantiating template class

Nicholas Wilson iamthewilsonator at hotmail.com
Sat Apr 6 17:44:25 UTC 2019


On Saturday, 6 April 2019 at 17:30:45 UTC, Mek101 wrote:
> I'm rewriting from C# a small library of mine to practice with 
> D.
> I have a class:
>
>
>  class WeightedRandom(T, W = float) if(isNumeric!W)
>  {
> 	 // Fields
> 	 private W[T] _pairs;
> 	 // The total sum of all the weights;
> 	 private W _probabilities;
>
>          /// Code...
>  }
>
>
> And when I try to instantiate an object in a unittest
>
>
>  unittest
>  {
> 	 auto wrnd = new WeightedRandom!char();
> 	 wrnd.normalizeAt(120.55);
>  }
>
>
> Compilation fails with the following error:
>
>
>  source/utils/weightedRandom.d(25,18): Error: cannot pass type 
> char as a function argument
>  source/utils/weightedRandom.d(90,18): Error: template instance 
> `utils.weightedrandom.WeightedRandom!(char, float)` error 
> instantiating
>  /usr/bin/dmd failed with exit code 1.
>
>
> Same exact error with:
>    WeightedRandom!(char)();
>    WeightedRandom!(string, float)();
>
>
> It seems like dmd thinks I'm calling a function while I'm 
> trying to instantiate the object.

Hmm,

import std.traits;
class WeightedRandom(T, W = float) if(isNumeric!W)
  {
	 // Fields
	 private W[T] _pairs;
	 // The total sum of all the weights;
	 private W _probabilities;

          /// Code...
  }

void main()
{
     auto wrnd = new WeightedRandom!char();
}

works for me: https://run.dlang.io/is/CjSubj


More information about the Digitalmars-d-learn mailing list