I'm having some trouble getting mixed-in functions to override each other
properly. Here's the function I've templated:
private template tRegister(T) {
static public BindableProperty Register(string propName, TypeInfo ti,
BindableObject owner, T defaultValue) {
return _Register(propName, ti, owner,
(cast(void*)defaultValue));
}
}
Then, in a class, I'm mixing it in numerous times:
mixin tRegister!(bool) tm_bool;
mixin tRegister!(byte) tm_byte;
mixin tRegister!(ubyte) tm_ubyte;
mixin tRegister!(int) tm_int;
mixin tRegister!(uint) tm_uint;
mixin tRegister!(long) tm_long;
mixin tRegister!(ulong) tm_ulong;
mixin tRegister!(float) tm_float;
mixin tRegister!(double) tm_double;
mixin tRegister!(real) tm_real;
mixin tRegister!(char) tm_char;
mixin tRegister!(char[]) tm_string;
mixin tRegister!(Object) tm_Object;
I then have a bunch of aliases like so:
alias tm_bool.Register Register;
alias tm_byte.Register Register;
alias tm_ubyte.Register Register;
...etc.
In a unittest, I try making these calls:
NameProperty = BindableProperty.Register("Name", typeid(string), this,
"Donald");
AngerProperty = BindableProperty.Register("Anger", typeid(uint), this,
cast(uint)(0));
Compilation breaks at the second line with these errors:
A.d(122): function alias A.BindableProperty.Register called with argument types:
(char[5u],TypeInfo,Duck,uint)
matches both:
A.BindableProperty.tRegister!(bool).Register(char[],TypeInfo,BindableObject,bool)
and:
A.BindableProperty.tRegister!(char).Register(char[],TypeInfo,BindableObject,char)
It shouldn't match either of these, only the uint overload.