繁体   English   中英

将函数指针从 Arduino 传递给 C++

[英]Passing function pointer from Arduino to C++

这个问题是关于 C++,但它与 Arduino 交互,由于我不是软件开发人员,我很乐意得到一些建议。

在 Arduino 中,用户创建一个类的实例并设置其委托方法:

Arduino main program:

    //instance
    Main interpreter;
    //set delegate
      interpreter.setDelegate(intepreterDelegate);
    //delegate function
         float intepreterDelegate(char *arg){return 3;}

Main类然后创建另一个类的实例,称为Sub ,因此:

Sub - > send delegate to Main-> send delegate to Arduino

Main确实通过以下方式成功地从 Sub获取了委托消息:

Main.h

  //being called from the sub
   static float fromSubDelegate(char *arg){

        // *Here I am trying to push forward this delegate out to the user on arduino
        Main. b;   
        float result = (b.*b.fpAction)(arg);
        return  result;


     };

    float (Main.::*fpAction)(char*) = 0 ;
    void setDelegate( float(*fp)(char*));

问题出在我设置委托的Main.cpp

//arduino set this delegate of the main class .cpp
void Main.::setDelegate( float(*fp)(char*))
{

    fpAction = fp; // *gives error because fpAction is a member function

}

我已经提供了我拥有的所有数据。 我不是 C++ 程序员,因此我可能做错了什么。

这不是你在另一个问题中问的。 您(似乎)在 adruino 代码中执行的操作与您在 C++ 代码中想要执行的操作之间存在不匹配。

您不能将委托从非成员函数更改为成员函数,并且您不能在它使用的类之外​​定义成员函数(即委托)。

你正在尝试的东西目前没有意义。 你的 arduino 定义了一个实例

Main interpreter;

然后它在解释器实例中定义和设置委托(到目前为止还可以)。

但是在 fromSubDelegate() 中,您创建了一个新实例 b。 您在解释器实例中设置的任何委托都不会在 b 实例中设置,除非函数指针是静态的,但在这种情况下,您甚至不需要 fromSubDelegate() 函数,您只需调用函数指针即可直接。

你似乎对事情的运作方式有一个错误的想法。 要带回家的是,如果您有一个类的非静态成员函数,则有一个隐藏的额外参数,您可以在函数中将其用作“this”。 所以你定义的成员函数

class X
{
    void func(int i);
}

不一样

void func (int i);

在类之外定义。 真的更像void

func(X* this, int i); 

尽管这在语义上是“正确的”,但在语法上却并非如此。

感谢oreubens的帮助,我找到了一个解决方案 - 只是直接从 main 传递到 sub,函数的指针,所以:

void Main::setDelegate( float(*fp)(char*))
{
    fpAction=fp;
    sub->setDelegate(fpAction);



}

效果很好。 再次感谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM