D - Problems with delegates
- Paul Runde <prunde mcleodusa.net> Oct 20 2002
- "Walter" <walter digitalmars.com> Oct 24 2002
This code works:
alias void delegate(int) t_func;
class Foo
{
t_func func1;
void dothis()
{
if (func1) func1(4); else
printf("func1 not assigned\n");
}
void func(int num) { printf("num = %d\n", num); }
}
int main(char[][] args)
{
Foo a = new Foo;
a.dothis();
a.func1 = &a.func;
a.dothis();
return 0;
}
Result: func1 not assigned
num = 4
However, if I move the func declaration to outside of the class, the
line "a.func1 = &func" produces the error message: toelem: cannot cast
from void(*)(int num) to void delegate(int).
If I then change the t_func declaration from alias to typedef then I
get: cannot implicitly convert void(*)(int num) to t_func.
If I go back to the original working code and change alias to typedef
then I get: Internal error: e21r.c 78
What are the reasons for these error messages? It seems to me that all
of these senarios should work.
Thanks,
Paul
Oct 20 2002
Delegates are a combination of function pointer with a 'this' pointer. Hence, a function outside of a class can't be a delegate. I'll check into the internal error. Thanks, -Walter "Paul Runde" <prunde mcleodusa.net> wrote in message news:3DB37363.30709 mcleodusa.net...This code works: alias void delegate(int) t_func; class Foo { t_func func1; void dothis() { if (func1) func1(4); else printf("func1 not assigned\n"); } void func(int num) { printf("num = %d\n", num); } } int main(char[][] args) { Foo a = new Foo; a.dothis(); a.func1 = &a.func; a.dothis(); return 0; } Result: func1 not assigned num = 4 However, if I move the func declaration to outside of the class, the line "a.func1 = &func" produces the error message: toelem: cannot cast from void(*)(int num) to void delegate(int). If I then change the t_func declaration from alias to typedef then I get: cannot implicitly convert void(*)(int num) to t_func. If I go back to the original working code and change alias to typedef then I get: Internal error: e21r.c 78 What are the reasons for these error messages? It seems to me that all of these senarios should work. Thanks, Paul
Oct 24 2002








"Walter" <walter digitalmars.com>