(一) C++回调函数、静态函数、成员函数踩过的坑。
明确一点即回调函数需要是静态函数。原因:
普通的C++成员函数都隐含了一个this指针作为参数,这样使得回调函数的参数和成员函数参数个数不匹配。
以前在使用回调函数的数据都是定义一个全局变量,把回调函数的返回结果给这个全局变量,然后在定时去刷新这个全局变量,这样虽然可以实现功能,但是方法不是很好 。
(二) 今天使用类的静态函数作为回调函数,具体方式如下,
(1) 在头文件中定义类
class CardDataDispose : public QObject
{
Q_OBJECT
public:
static void callback(int device, int msg, int param1, void *param2);//回调函数
void data(QString cardID, QString cardAnswer);
};
(2) 在引用回调类的源文件中设置回调函数。
TB_SetCallbackAddr(CardDataDispose::callback);
(3) CardDataDispose回调函数的原型
void CardDataDispose::callback(int device, int msg, int param1, void *param2)
{
CardDataDispose *a;
a->data("1" , "2");
}
void CardDataDispose::data(QString cardID, QString cardAnswer)
{
引用回调函数的类
UBBoardController *b;
b->receiveCardData(cardID, cardAnswer);
}
(三) 通过以上把回调函数封装成一个类,在收到数据后直接调用receiveCardData()函数就可以传输数据,不需要开启定时器刷新了。