使用类成员的 C++ 函数回调并在 main 中运行

Posted

技术标签:

【中文标题】使用类成员的 C++ 函数回调并在 main 中运行【英文标题】:C++ Function Callback using class member and run it in main 【发布时间】:2020-03-29 21:38:11 【问题描述】:

我知道,很多帖子都在问这个问题,已经阅读了大约 10 篇答案很长的帖子,但是,每篇帖子似乎都不同,需要不同的实施。

那么,我在这里做错了什么?

#include <iostream>
using namespace std;
class Foo 
   public:
    void callbackFunc(void (*funcParam1)());
    void funcA();

;
void Foo::callbackFunc(void (*funcParam1)()) 
    funcParam1();

void Foo::funcA()  cout << "func A OK.." << endl; 
void aa()
    int x =0;

Foo bar;
int main()  bar.callbackFunc(bar.funcA); 


此示例在main() 中抛出error: invalid use of non-static member function ‘void Foo::funcA()’,尤其是在callbackFunc 参数中。

我想稍后在 arduino 中使用它。

【问题讨论】:

你需要一个对象来调用成员函数 成员函数指针不同于常规函数指针 (***.com/questions/2402579/…) 目前尚不完全清楚您想通过该设计实现什么,因为callbackFunc 会立即调用该函数。您是否真的想存储回调以供以后调用?签名总是void(*)()吗? &amp;Foo::funcA 不是bar.funcA @idclev463035818 &amp;Foo::funcA 是引用非静态成员函数的正确语法。 【参考方案1】:

static funcA 可能会出现错误:

static void funcA();

看起来问题在于您的 callbackFunc 需要一个函数指针,但成员函数 funcA 不是一个普通函数,并且需要一个对象开头。将其设为static 即可解决问题。

【讨论】:

嗨,这部分正确。但是,稍后,每个实例将使用每个类的变量。因此,将其设为静态并不能解决问题。但是,谢谢你的回答。

以上是关于使用类成员的 C++ 函数回调并在 main 中运行的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 类成员函数作为 C 回调函数

C++中类成员函数作为回调函数

如何实现类的成员函数作为回调函数

c++ 回调类成员函数实现

C++ 成员函数作为外部库的回调函数

C++使用模板类调用非静态成员函数