Thread overview | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
December 23, 2001 function pointers | ||||
---|---|---|---|---|
| ||||
Yes, I know it's not the first time this question is asked, still... what will be the syntax for function pointers in D? Will it be like in C (please, no!), or D-style when all type attributes are on the left... or whatever? The reason why I ask is that I've started messing with WinAPI headers, trying to convert them to D, so far I have a simple converter already but I need to know syntax for function pointers to bring it to working stage... |
December 23, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pavel Minayev | At the moment they work like C function pointers. -Walter "Pavel Minayev" <evilone@omen.ru> wrote in message news:a05amk$278o$1@digitaldaemon.com... > Yes, I know it's not the first time this question is > asked, still... what will be the syntax for function > pointers in D? Will it be like in C (please, no!), > or D-style when all type attributes are on the left... > or whatever? > > The reason why I ask is that I've started messing > with WinAPI headers, trying to convert them to D, so > far I have a simple converter already but I need to > know syntax for function pointers to bring it to > working stage... > > |
December 23, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | "Walter" <walter@digitalmars.com> wrote in message news:a05cv8$28l0$1@digitaldaemon.com... > At the moment they work like C function pointers. -Walter At the moment?.. Are you planning to change 'em? |
December 23, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | Also, I've noticed that there is no way to put extern() into function pointer declaration. There should be a way to do that since all API callbacks are defined as stdcall. |
December 23, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pavel Minayev | The usual way to accomplish that is put the extern around a typedef. "Pavel Minayev" <evilone@omen.ru> wrote in message news:a05got$2b6c$1@digitaldaemon.com... > Also, I've noticed that there is no way to put extern() > into function pointer declaration. There should be a > way to do that since all API callbacks are defined as > stdcall. > > |
December 23, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pavel Minayev | "Pavel Minayev" <evilone@omen.ru> wrote in message news:a05gga$2b5c$1@digitaldaemon.com... > "Walter" <walter@digitalmars.com> wrote in message news:a05cv8$28l0$1@digitaldaemon.com... > > > At the moment they work like C function pointers. -Walter > > At the moment?.. Are you planning to change 'em? Probably not. If it ain't broke ... |
December 24, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | "Walter" <walter@digitalmars.com> wrote in message news:a05jv9$2cuo$2@digitaldaemon.com... > > > At the moment they work like C function pointers. -Walter > > > > At the moment?.. Are you planning to change 'em? > > Probably not. If it ain't broke ... Pretty bad... it doesn't suite the way other things are declared. Both pointers and arrays in declaration are applied to type rather than to variable, why such a mess with functions? The syntax is clumsy and rather limited. How do I declare an array of function pointers? Or pointer to function that returns pointer to function? Or simply declare several pointers at once? Yes, this can be done with a typedef, I know, but with D-style syntax it would be even simplier: LRESULT(uint, HANDLE, WPARAM, LPARAM) OldWndProc; // declare function ptr void(int*)[10] ptrarray; // array of funcptrs void(int)(char[]) funcptr; // ptr to function that returns ptr to function char[]() a, b, c; // three pointers to function returning char[] Another problem with C-style syntax is typedefing and aliasing. The usual syntax is "typedef old-type new-type", the same with alias. However, function pointers are a mess here: typedef LRESULT (*WindowProc)(uint, HANDLE, WPARAM, LPARAM); It's not very easy to tell where is the "old" type and where is the "new" one by looking at this line quickly... D-style would be: typedef LRESULT(uint, HANDLE, WPARAM, LPARAM) WindowProc; Don't you think it's just better to parse, read, and understand? |
December 24, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter | "Walter" <walter@digitalmars.com> wrote in message news:a05jv8$2cuo$1@digitaldaemon.com... > The usual way to accomplish that is put the extern around a typedef. Is it already possible in latest alpha? |
December 24, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pavel Minayev | "Pavel Minayev" <evilone@omen.ru> wrote in message news:a06pco$9bk$2@digitaldaemon.com... > "Walter" <walter@digitalmars.com> wrote in message news:a05jv8$2cuo$1@digitaldaemon.com... > > > The usual way to accomplish that is put the extern around a typedef. > > Is it already possible in latest alpha? It should work. |
December 24, 2001 Re: function pointers | ||||
---|---|---|---|---|
| ||||
Posted in reply to Pavel Minayev | I have to rewrite the declaration parsing code anyway, I'll revisit it then. -Walter "Pavel Minayev" <evilone@omen.ru> wrote in message news:a06pcm$9bk$1@digitaldaemon.com... > "Walter" <walter@digitalmars.com> wrote in message news:a05jv9$2cuo$2@digitaldaemon.com... > > > > > At the moment they work like C function pointers. -Walter > > > > > > At the moment?.. Are you planning to change 'em? > > > > Probably not. If it ain't broke ... > > Pretty bad... it doesn't suite the way other things are declared. > Both pointers and arrays in declaration are applied to type > rather than to variable, why such a mess with functions? The > syntax is clumsy and rather limited. How do I declare an array > of function pointers? Or pointer to function that returns pointer > to function? Or simply declare several pointers at once? Yes, this > can be done with a typedef, I know, but with D-style syntax it > would be even simplier: > > LRESULT(uint, HANDLE, WPARAM, LPARAM) OldWndProc; // declare function > ptr > void(int*)[10] ptrarray; // array of funcptrs > void(int)(char[]) funcptr; // ptr to function that returns ptr to > function > char[]() a, b, c; // three pointers to function returning char[] > > Another problem with C-style syntax is typedefing and aliasing. The usual syntax is "typedef old-type new-type", the same with alias. However, function pointers are a mess here: > > typedef LRESULT (*WindowProc)(uint, HANDLE, WPARAM, LPARAM); > > It's not very easy to tell where is the "old" type and where is the "new" one by looking at this line quickly... D-style would be: > > typedef LRESULT(uint, HANDLE, WPARAM, LPARAM) WindowProc; > > Don't you think it's just better to parse, read, and understand? > > |
Copyright © 1999-2021 by the D Language Foundation