digitalmars.D.learn - Passing around a list of differently typed functions
- Evan Davis (7/7) Jun 22 2014 As the subject says, I would like to pass around an array of
- Tobias Pankrath (2/9) Jun 22 2014 Use void* as a common type or use std.variant.
- FreeSlave (4/11) Jun 22 2014 You can pass them as pointers, for example cast to void*. But you
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (8/20) Jun 23 2014 function.
- Steven Schveighoffer (5/27) Jun 23 2014 Wow, really? That is strange.
- Bienlein (6/13) Jun 23 2014 Have functions in the array without parpameters that call the
- Alix Pexton (5/21) Jun 23 2014 You could convert your functions to return via an out parameter (either
As the subject says, I would like to pass around an array of functions. The trick is, that the functions have different type signatures. Is there a way to put the two functions int foo(int a, int b); bool bar(bool a, bool b); into one array, that I can pass around and cast as necessary? Thanks, Evan
Jun 22 2014
On Monday, 23 June 2014 at 01:16:49 UTC, Evan Davis wrote:As the subject says, I would like to pass around an array of functions. The trick is, that the functions have different type signatures. Is there a way to put the two functions int foo(int a, int b); bool bar(bool a, bool b); into one array, that I can pass around and cast as necessary? Thanks, EvanUse void* as a common type or use std.variant.
Jun 22 2014
On Monday, 23 June 2014 at 01:16:49 UTC, Evan Davis wrote:As the subject says, I would like to pass around an array of functions. The trick is, that the functions have different type signatures. Is there a way to put the two functions int foo(int a, int b); bool bar(bool a, bool b); into one array, that I can pass around and cast as necessary? Thanks, EvanYou can pass them as pointers, for example cast to void*. But you still need correct signature to cast pointer to actual type before call function.
Jun 22 2014
On 06/22/2014 11:32 PM, FreeSlave wrote:> On Monday, 23 June 2014 at 01:16:49 UTC, Evan Davis wrote:function. In C and C++, void* is for data pointers only. As function pointers are a different kind of beast, casting to and from void* is undefined behavior. (Note: It works on all common platforms.) I wonder whether D has any decision on that. AliAs the subject says, I would like to pass around an array of functions. The trick is, that the functions have different type signatures. Is there a way to put the two functions int foo(int a, int b); bool bar(bool a, bool b); into one array, that I can pass around and cast as necessary? Thanks, EvanYou can pass them as pointers, for example cast to void*. But you still need correct signature to cast pointer to actual type before call
Jun 23 2014
On Mon, 23 Jun 2014 14:30:12 -0400, Ali =C3=87ehreli <acehreli yahoo.com=wrote:On 06/22/2014 11:32 PM, FreeSlave wrote:> On Monday, 23 June 2014 at =01:16:49 UTC, Evan Davis wrote: >> As the subject says, I would like to pass around an array of >> functions. The trick is, that the functions have different type >> signatures. Is there a way to put the two functions >> >> int foo(int a, int b); >> bool bar(bool a, bool b); >> >> into one array, that I can pass around and cast as necessary? >> >> Thanks, Evan > > You can pass them as pointers, for example cast to void*. But you =still > need correct signature to cast pointer to actual type before call =function. In C and C++, void* is for data pointers only. As function pointers ar=e =a different kind of beast, casting to and from void* is undefined =behavior. (Note: It works on all common platforms.)Wow, really? That is strange.I wonder whether D has any decision on that.I would hope it's defined. A pointer is a pointer. -Steve
Jun 23 2014
On Monday, 23 June 2014 at 01:16:49 UTC, Evan Davis wrote:As the subject says, I would like to pass around an array of functions. The trick is, that the functions have different type signatures. Is there a way to put the two functions int foo(int a, int b); bool bar(bool a, bool b); into one array, that I can pass around and cast as necessary? Thanks, EvanHave functions in the array without parpameters that call the function with the applicable parameters, e.g. int foo(int a, int b) or bool bar(bool a, bool b). That doesn't address the problem of the different return types (int and bool). So change the return type to void and return the value as an inout parameter.
Jun 23 2014
On 23/06/2014 8:19 AM, Bienlein wrote:On Monday, 23 June 2014 at 01:16:49 UTC, Evan Davis wrote:You could convert your functions to return via an out parameter (either manually or with template magic) then have an array of same-signatured closures that can call any function. A...As the subject says, I would like to pass around an array of functions. The trick is, that the functions have different type signatures. Is there a way to put the two functions int foo(int a, int b); bool bar(bool a, bool b); into one array, that I can pass around and cast as necessary? Thanks, EvanHave functions in the array without parpameters that call the function with the applicable parameters, e.g. int foo(int a, int b) or bool bar(bool a, bool b). That doesn't address the problem of the different return types (int and bool). So change the return type to void and return the value as an inout parameter.
Jun 23 2014