C++11 “什么是”呢;“回写”;在C++;为了Arduino?

C++11 “什么是”呢;“回写”;在C++;为了Arduino?,c++11,arduino,C++11,Arduino,在我使用的库中,有一个WriteCallback类型。我不知道它是什么,我在任何地方都找不到它 有人能给我解释一下什么是回写吗?它是C++中的原生函数还是类型?< /P> .h文件 #if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WConstants.h" #endif typedef void (*WriteCallback) (const byte wha

在我使用的库中,有一个WriteCallback类型。我不知道它是什么,我在任何地方都找不到它

有人能给我解释一下什么是回写吗?它是C++中的原生函数还是类型?< /P> .h文件

#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WConstants.h"
#endif

typedef void (*WriteCallback)  (const byte what);    // send a byte to serial port
typedef int  (*AvailableCallback)  ();    // return number of bytes available
typedef int  (*ReadCallback)  ();    // read a byte from serial port

void sendMsg (WriteCallback fSend, 
              const byte * data, const byte length);
byte recvMsg (AvailableCallback fAvailable, ReadCallback fRead, 
              byte * data, const byte length, 
              unsigned long timeout = 500);

typedef void(*WriteCallback)(常量字节what)
定义一个类型,该类型接受一个
常量字节
,并返回一个
无效
。它用于轻松使用函数指针。正如使用
typedef
定义
uint8\t
一样:
typedef无符号字符uint8\t用作8位宽度变量的简单速记

一个示例用法是:

typedef void (*WriteCallback)  (const byte what);
void sendMsg (WriteCallback fSend, const byte * data, const byte length);

void callbackfunction(const byte what) { /*do stuff*/ }
通过函数调用:

sendMsg(&callbackfunction,0);
在内部,
sendMsg
将调用
fSend
变量所指向的函数,在本例中,该变量是
callbackfunction

使用此
typedef
可以轻松定义函数指针,并根据示例切换使用的写回调

Writecallback funcPtr;

void switchCallback(){
    static int tmp = 0;
    if(tmp)
        funcPtr = &writecallbackA;
    else
        funcPtr = &writecallbackB;
    tmp = (tmp) ? 0 : 1;
}
上述用法比以下用法更易于阅读和理解:

void (*fun_ptr) (const byte what);

&callbackfunction
定义函数指针。typedef定义了一个函数指针类型。简单地说,这是一个指向一个函数的指针,该函数将常量字节作为唯一的参数。这主要用于传递将用作回调的函数。快看一眼