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