Можно ли скопировать функцию в другую функцию, и если нет, то какие есть альтернативы?

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

У меня есть класс:

#include "list.h"

class Renderer{
    public:
        list<int> pressedButtons;
        list<int> pressedKeys;

        void (*updFunc)(list<int>, list<int>);

        Renderer();

        void setUpdateFunc(void (*f)(list<int>, list<int>)){
            updFunc=f;
        }

        void run(){
            while(1){
                //Event polling
                //window clear
                updFunc(pressedKeys, pressedButtons);
                //window update
            }       
        }
};

По моей задумке, сначала создаётся пустая заготовка под функцию (updFunc) и в функции setUpdateFunc задаётся уже точное значение функции updFunc. При попытке это сделать выскакивает ошибка: Выражение должно быть допустимым для изменения левосторонним значением, я так понял что функция - это константа. Вопрос, как можно сделать что-то подобное?

list.cpp list.h

Ответы

▲ 1

Посмотрите на этот код, может, станет понятнее?

void f1(int i) { cout << "f1(" << i << ")\n"; }
void f2(int i) { cout << "f2(" << i << ")\n"; }

struct Test
{
    void (*free_fun)(int);
    void (Test::*mem)(int);

    void m1(int i){ cout << "m1(" << i << ")\n"; }
    void m2(int i){ cout << "m2(" << i << ")\n"; }
};

int main(int argc, char * argv[])
{
    Test t;
    t.free_fun = f1;
    t.free_fun(1);
    t.free_fun = f2;
    t.free_fun(2);

    t.mem = &Test::m1;
    (t.*t.mem)(3);
    t.mem = &Test::m2;
    (t.*t.mem)(4);
}