On 7/14/2011 12:24 AM, Trass3r wrote:
Am 13.07.2011, 16:58 Uhr, schrieb Tyro[a.c.edwards] <nos...@home.com>:
Don't know it this is the right answer or a possible bug but it does
the trick:

void h() { import std.stdio; write("h()"); }

class Bla
{
mixin wrap!h;
}

mixin template wrap(alias f)
{
void blub(typeof(&f) g = &f)
{
g();
}
}

void main()
{
Bla b = new Bla();
b.blub();
}

Thanks!
Unfortunately it doesn't work with more complex functions:

Error: arithmetic/string type expected for value-parameter, not
cl_errcode C function(cl_program program, uint param_name, ulong
param_value_size, void* param_value, ulong* param_value_size_ret)

I guess the simplest example of the problem you're experiencing would be this:

void h() { import std.stdio; write("h()"); }

void function() fp = &h;

class Bla
{
    mixin wrap!(fp);
}

mixin template wrap(alias f)
{
    void blub()
    {
        typeof(&f) g = &f;
    g();  // <--- source of error [1]
    }
}

void main()
{
    Bla b = new Bla();
    b.blub();
}

edit1.d(19): Error: function expected before (), not g of type void function()*

[1] Here you are calling a function pointer which simply returns the address of the function... hence your error!

Try calling the function pointed to by differencing the pointer as such: (*g)() and your problem is solved.

Reply via email to