Mixin virtual functions -- overloads

Tim M a at b.com
Tue Feb 24 20:39:39 PST 2009


On Wed, 25 Feb 2009 06:31:37 +1300, Justin <mrjnewt at gmail.com> wrote:

> I can probably figure out the bulk of the problem if someone can direct  
> me to the correct way of mixing in a bunch of functions and having them  
> overload each other properly. I'm using D 1.39 and the documentation  
> indicated that I needed to use the MixinDeclaration and aliases, so this  
> is what I have:
>         mixin tSetValue!(bool) tm_bool;
> 	mixin tSetValue!(byte) tm_byte;
> 	mixin tSetValue!(ubyte) tm_ubyte;	
> 	mixin tSetValue!(int) tm_int;
> 	mixin tSetValue!(uint) tm_uint;
> 	mixin tSetValue!(long) tm_long;
> 	mixin tSetValue!(ulong) tm_ulong;
> 	mixin tSetValue!(float) tm_float;
> 	mixin tSetValue!(double) tm_double;
> 	mixin tSetValue!(real) tm_real;
> 	mixin tSetValue!(char) tm_char;
> 	mixin tSetValue!(Object) tm_Object;
>
> 	alias tm_bool.SetValue SetValue;
> 	alias tm_byte.SetValue SetValue;
> 	alias tm_ubyte.SetValue SetValue;
> 	alias tm_int.SetValue SetValue;
> 	alias tm_uint.SetValue SetValue;
> 	alias tm_long.SetValue SetValue;
> 	alias tm_ulong.SetValue SetValue;
> 	alias tm_float.SetValue SetValue;
> 	alias tm_double.SetValue SetValue;
> 	alias tm_real.SetValue SetValue;
> 	alias tm_char.SetValue SetValue;
> 	alias tm_Object.SetValue SetValue;
>
> But it seems that only the first use is recognized and the compiler  
> tries to match all uses of the function to that first signature (bool).

You are probably using alias and/or mixin incorrectly. It would be easier  
with full source but as a guess are you trying to do something like this:

module main;


class TypeThing(T)
{
       T data;
       this()
       {
             //
       }
       void SetValue(T data)
       {
             this.data = data;
       }
}

class boolThing : TypeThing!(bool)
{
       this()
       {
             //
       }
}

void Register(char[] t)()
{
       mixin("class "~t~"Thing : TypeThing!("~t~")
             {
                   this()
                   {
                         //
                   }
             }");
}

void main()
{
       Register!("bool");
       Register!("char");
}






More information about the Digitalmars-d mailing list