使用函数指针传递类函数到外部库

时间:2016-07-12 18:21:50

标签: function class pointers arduino

我有一个使用预先存在的库的类。有一个函数调用需要一个函数指针,我试图传入我的类中的函数。它虽然没有编译。我该怎么做才能解决这个问题? (另外,我确信以前会以更清晰的方式询问过这个问题。我对此不满意,所以我很抱歉)。 注意:这是针对arduino的。

在我的主程序中,我有以下代码......

#include "CM.h"

CM cm;

void setup()  {
    cm.setup();
}

CM.h

class CM {
    private:
        LibClass *lib;
        void onInit();

    public:
        void setup();
};

CM.cpp

#include "CM.h"

void CM::setup() {
    lib->attach(onInit);  // <-- this isn't working.
}

void CM::onInit() {
    Serial.println("HERE I AM");
}

1 个答案:

答案 0 :(得分:0)

要传递成员函数,您需要使其成为&#34;静态&#34;然后使用全范围限定符传递它:

    #include <iostream>

    void attach( void (*func)(void) );


    class CM {
    private:
     static void onInit();

    public:
        void setup();
    };

    void CM::setup()
    {
        attach(CM::onInit);
    }

    void CM::onInit(void)
    {
        std::cout << "HERE I AM";
    }

    // a global function pointer for this example
    void (*p_func)(void);

   // a "library" attach function
    void attach( void (*func)(void) )
    {
        p_func = func;

    }


    int main(int argc, const char * argv[]) {
        CM my;

        my.setup();

        p_func();  // like the library call 

        return 0;
    }