Передать функцию как аргумент, затем использовать как метод класса

Рейтинг: 0Ответов: 1Опубликовано: 18.01.2023

Требуется передать функцию аргументом для другой функции, затем сделать переданную функцию методом класса. Пытался сделать примерно так:

class A{
    public:
        void setExDef(std::function<void()> *f){
            exDef = f;
        };
    
        void executeDef(){
            exDef();
        };
    
    private:
        void *exDef;
};

Затем получил ошибку error: expression cannot be used as a function. Надеюсь что пояснил понятно.

Ответы

▲ 1

Похоже, вам надо

class A{
    public:
        void setExDef(std::function<void()> f){
            exDef = std::move(f);
        };
    
        void executeDef(){
            exDef();
        };
    
    private:
        std::function<void()> exDef;
};

Ну, или

class A{
    public:
        void setExDef(void(*f)()){
            exDef = f;
        };
    
        void executeDef(){
            exDef();
        };
    
    private:
        void (*exDef)();
};