将 Void 作为指针传递到类中,然后执行其内容

发布于 2024-12-04 14:48:44 字数 444 浏览 1 评论 0原文

如何将函数作为参数传递然后执行它。我正在尝试做这样的事情:

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;
}

这当然是行不通的。

How can I pass a function as an argument and then execute it. I'm trying to do something like this:

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;
}

This is not working of course.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

提赋 2024-12-11 14:48:44

你很接近。

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();
}

You were close.

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();
}
征﹌骨岁月お 2024-12-11 14:48:44

尝试:

    void (*external)();

您的原始声明是指向 void 的指针,而不是指向返回 void 的函数的指针。

Try:

    void (*external)();

Your original declaration is a pointer to void, not a pointer to a function returning void.

浮萍、无处依 2024-12-11 14:48:44

设置它

external = function;

并执行 with

external();

另外,external 必须声明为函数指针void (*external)()。否则,您必须在函数指针和 void 指针之间进行转换。

Set it with

external = function;

and execute with

external();

Also, external has to be declared as a function pointer void (*external)(). Otherwise, you have to cast between function- and void-pointer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文