Problem with templates
    Sean Reque 
    seanthenewt at yahoo.com
       
    Mon Jul  7 10:04:44 PDT 2008
    
    
  
> It can't.  Delegates and functions currently have different calling 
> conventions and the compiler cannot automatically convert one to the other. 
> Was this just intuition or did you read that it would somewhere?
Take this example:
R delegate(U) Curry(R, A, U...)(R delegate(A, U) dg, A arg)
{
    struct Foo
    {
	typeof(dg) dg_m;
	typeof(arg) arg_m;
	R bar(U u)
	{
	    return dg_m(arg_m, u);
	}
    }
    Foo* f = new Foo;
    f.dg_m = dg;
    f.arg_m = arg;
    return &f.bar;
}
void main()
{
    int plus(int x, int y, int z)
    {
	return x + y + z;
    }
    auto plus_two = Curry(&plus, 2);
Notice how the function Curry accepts a delegate, but a function pointer is actually passed in. I have personally re-written this function to take advantage of D2 closures and it worked perfectly fine.
> Why can't this be done with a static function?  Or rather, I'm not seeing 
> how using a delegate makes what you want to do easier. 
> 
You know, I think you are write and that a static function would work. I would just instantiate templates for every function I wanted to create a new version of.  I don't think I quite understood how it worked at first. And if I really needed a delegate, I could easily wrap the invocation of a specific template instantation inside a delegate call and use that.
Unfortunately, neither your compose or my compose is working for me right now :(.
    
    
More information about the Digitalmars-d-learn
mailing list