C++/C function pointers that return void*
I'm trying to call a function that takes an argument, void(*)(void*, int, const char*)
, but I cannot figure out how to pass those arguments to the function.
Example:
void ptr(int);
int function(int, int, void(*)(int));
I am trying to call the function like this:
function(20, 20, ptr(20));
Is this possible?
Solution 1:
You are doing one thing incorrectly - you are trying to invoke your 'ptr' function before invoking 'function'. What you were supposed to do is to pass just a pointer to 'ptr' and invoke 'ptr' using passed pointer from 'function' like that:
void ptr(int x)
{
printf("from ptr [%d]\n", x);
}
int function(int a, int b , void (*func)(int) )
{
printf( "from function a=[%d] b=[%d]\n", a, b );
func(a); // you must invoke function here
return 123;
}
void main()
{
function( 10, 2, &ptr );
// or
function( 20, 2, ptr );
}
which gives:
from function a=[10] b=[2]
from ptr [10]
from function a=[20] b=[2]
from ptr [20]
which is what you wanted
for
function(20, 20, ptr(20));
to work - you would have to have sth like:
// 'ptr' must return sth (int for example)
// if you want its ret val to be passed as arg to 'function'
// this way you do not have to invoke 'ptr' from within 'function'
int ptr(int);
int function(int, int , int);
Solution 2:
The usual trick is to use a typedef for signature:
typedef void signature_t (void*, int, const char*);
Notice that without the typedef
the syntax is like a function declaration. It declares signature_t
as a typedef for functions, so you'll always use pointers to signature_t
in practice.
Then you can declare your "high-order" function as
int function (int, int, signature_t*);
See also this reply.
Solution 3:
The correct syntax for function call is:
function(20,20, &ptr);
If you feel lost, try some tutorials, or this