我正在尝试开发一种用于微控制器的嵌入式库,其中(可能是徒劳的)尝试成为设备通用的。基本上,我在标题中声明了struct
,称为CallbackStruct
,它有一大堆函数指针用于下游控制UART对象(即Arduinos的Serial
对象,只是指出一个潜在的用法)。
问题是我不太确定如何将一个函数指针(特别是从结构中取消引用时)指定给另一个存储为私有变量的函数指针。本质上,我需要理解函数指针的正确C ++语法。这是我到目前为止所做的:
标题:
class SomeUARTDevice {
public:
struct CallbackStruct {
void (*init) (int);
void (*xmit) (char *);
int (*recv) (void);
int (*avbl) (void);
void (*flsh) (void);
void (*kill) (void);
};
SomeUARTDevice (struct CallbackStruct *sc);
private:
void (*init_callback) (int);
void (*xmit_callback) (char *);
int (*recv_callback) (void);
int (*avbl_callback) (void);
void (*flsh_callback) (void);
void (*kill_callback) (void);
}
然后,在课程来源:
SomeUARTDevice::SomeUARTDevice (struct CallbackStruct *sc) {
init_callback = sc->init;
}
这是分配功能指针的正确方法(如果没有,我离开多远 - 一点点,或一英里)?
请注意,如果碰巧有其他语法boo-boos,我会迅速将其作为一个例子来展示这个问题,而不会让主要的工作变得混乱。
答案 0 :(得分:0)
看起来很好。函数指针的工作方式与任何其他指针一样。
但请注意,您可以使用构造函数的初始化列表直接初始化您的成员:
SomeUARTDevice::SomeUARTDevice(const CallbackStruct *sc)
: init_callback(sc->init)
, xmit_callback(sc->xmit)
// etc
{}