Chain two different struct specialization
Andrea Fontana
nospam at example.com
Fri Mar 1 06:43:33 PST 2013
On Friday, 1 March 2013 at 14:39:53 UTC, bearophile wrote:
> Andrea Fontana:
>
>> double likeness(T,T1)(ref in T1, ref in T2)
>
> ==>
>
> double likeness(T1, T2)(in ref T1, in ref T2)
>
> Bye,
> bearophile
Sure not the only error. I was writing "pseudo code". Real code
it's quite complex.
Try this one (is a really reduced working example):
struct MyStruct(WEIGHTS)
{
this (int p, int p2) { prop = p; prop2 = p2; }
int prop;
int prop2;
alias WEIGHTS weights;
}
double likeness(T1,T2)(ref in T1 first, ref in T2 second)
{
double v = (first.prop - second.prop) * first.weights.foo *
second.weights.foo;
v += (first.prop2 - second.prop2) * first.weights.bar *
second.weights.bar;
return v;
}
enum FirstWeights : double
{
foo = 0.3,
bar = 0.4
}
enum SecondWeights : double
{
foo = 0.5,
bar = 0.2
}
void main(string[] args)
{
auto s1 = MyStruct!FirstWeights(10,8);
auto s2 = MyStruct!FirstWeights(9, 10);
auto s3 = MyStruct!SecondWeights(9,10);
writeln(likeness(s1,s2)); // works
writeln(likeness(s1,s3)); // works
}
How to put s1,s2,3... in a range/array or something
similar/iterable? Probably there's no way (inside variant?)...
More information about the Digitalmars-d-learn
mailing list