Home > OS >  Passing a void function as a parameter to a void function
Passing a void function as a parameter to a void function

Time:09-28

This might seem stupid but please...

class Button{

public:

    void func();

    void Button(void func()){

        //Do something.

        //Like if(something){
    func();
}

    }

};

How do I pass func() as a parameter to Button()?

Thanks in advance!

CodePudding user response:

func cannot be passed into Button as an argument. The parameter of Button is a pointer to function, and pointers to functions cannot point to non-static member functions. func is a non-static member function and it cannot be pointed by a pointer to function.

Solutions:

  • Accept a pointer to member function as the parameter instead of a pointer to function.
  • Make func a non-member function or a static member function which can be pointed by a pointer to function.

CodePudding user response:

In C 11 and later, you can use std::function, eg:

#include <functional>

class Button{
public:
    void Button(std::function<void()> func){
        if (something){
            func();
        }
    }
};

This way, you can equally accept any callable type, whether that be a standalone function, a lambda, the result of std::bind(), etc.

  • Related