Home > Net >  How do I cast to a void (*)(int,int,int) in C ?
How do I cast to a void (*)(int,int,int) in C ?

Time:12-21

To keep it very simple I have a function that passes void (*)(int,int,int) how do I cast to it as a parameter?

example: Function(void (*)(int,int,int) );

I'm expecting to pass parameters here but I got no idea what they are

CodePudding user response:

The declaration of Function expects you to pass it the address of a free function (i.e. one not bound to the instance of a class) that takes three parameters of type int. You didn't specify a return type for Function so for this example I'm going to assume it is void.

#include <iostream>

void Function(void (*)(int, int, int));

void DoSomething(int a, int b, int c)
{
    std::cout << "DoSomething called with a=" << a << " b=" << b << " c=" << c;
}

int main()
{
    Function(DoSomething);
}

void Function(void (*callback)(int, int, int))
{
    std::cout
        << "Function called. Now calling 'callback' at address "
        << callback 
        << "\n";

    callback(1, 2, 3);
}

In this example main calls Function by passing the address of function DoSomething. The implementation of Function then calls the function it is passed (named callback) and passes 3 arguments 1, 2, and 3.

The result is the following

Function called. Now calling 'callback' at address 00511F55
DoSomething called with a=1 b=2 c=3

You should not need to do any casting to call Function. If you encounter an error or start believing that you should perform a cast to call it you're about to do something terribly wrong.

CodePudding user response:

Is this what you're looking for?

Function(static_cast<void (*)(int,int,int)>(fp))

You might alternatively need const_cast or reinterpret_cast depending on what you're casting...

  •  Tags:  
  • c
  • Related