Передача Void в класс в качестве указателя и последующее выполнение его содержимого - PullRequest
1 голос
/ 14 сентября 2011

Как я могу передать функцию в качестве аргумента и затем выполнить ее.Я пытаюсь сделать что-то вроде этого:

class Foo{
private:
    void (*external);
public:
    Foo(void (*function)()){ *external = *function; }
    ~Foo(){ }
    bool Execute(){ 
        *external(); // Somehow execute 'external' which does the same thing with 'function' 
        return true
    }
};

void pFnc(){
printf("test");
}


int main(){
 Foo foo = Foo(&pFnc);
 foo.Execute();
 return 0;
}

Это не работает, конечно.

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Попробуйте:

    void (*external)();

Ваше первоначальное объявление является указателем на void, а не указателем на функцию, возвращающую void.

2 голосов
/ 14 сентября 2011

Вы были близки.

class Foo
{
public:
    typedef void(*FN)(void);
    Foo(FN fn) : fn_(fn) {};
    bool Execute()
    {
        fn_();
        return true;
    }
    FN fn_;
};

void pFunc(){
    printf("test");
}

int main()
{
    Foo foo(&pFunc);
    foo.Execute();
}
1 голос
/ 14 сентября 2011

Установите его с помощью

external = function;

и выполнить с

external();

Кроме того, external должен быть объявлен как указатель на функцию void (*external)(). В противном случае вам нужно привести между указателем на функцию и void.

...