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.