将构造函数的函数指针存储到私有变量
Storing function pointer from constructor to private variable
我正在尝试为微控制器开发一个嵌入式库(可能是徒劳的)device-generic。本质上,我在 header 中声明了一个 struct
,称为 CallbackStruct
,它有一大堆用于下游控制 UART object 的函数指针(即 [= Arduinos 的 14=] object,只是为了指出一种潜在用途)。
问题是我不太确定如何将一个函数指针(尤其是从结构取消引用时)分配给另一个存储为私有变量的函数指针。本质上,我需要了解函数指针的正确 C++ 语法。这是我目前拥有的:
header:
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);
}
然后在 class 来源中:
SomeUARTDevice::SomeUARTDevice (struct CallbackStruct *sc) {
init_callback = sc->init;
}
这是分配函数指针的正确方法吗(如果不是,我偏离了多远——一点点,还是一英里)?
请注意,如果碰巧有其他语法 boo-boos,我很快将其作为示例放在一起来演示问题,而不会造成主要 work-in-progress 的混乱。
看起来不错。函数指针的工作方式与任何其他指针非常相似。
但请注意,您可以使用构造函数的初始化列表直接初始化您的成员:
SomeUARTDevice::SomeUARTDevice(const CallbackStruct *sc)
: init_callback(sc->init)
, xmit_callback(sc->xmit)
// etc
{}
我正在尝试为微控制器开发一个嵌入式库(可能是徒劳的)device-generic。本质上,我在 header 中声明了一个 struct
,称为 CallbackStruct
,它有一大堆用于下游控制 UART object 的函数指针(即 [= Arduinos 的 14=] object,只是为了指出一种潜在用途)。
问题是我不太确定如何将一个函数指针(尤其是从结构取消引用时)分配给另一个存储为私有变量的函数指针。本质上,我需要了解函数指针的正确 C++ 语法。这是我目前拥有的:
header:
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);
}
然后在 class 来源中:
SomeUARTDevice::SomeUARTDevice (struct CallbackStruct *sc) {
init_callback = sc->init;
}
这是分配函数指针的正确方法吗(如果不是,我偏离了多远——一点点,还是一英里)?
请注意,如果碰巧有其他语法 boo-boos,我很快将其作为示例放在一起来演示问题,而不会造成主要 work-in-progress 的混乱。
看起来不错。函数指针的工作方式与任何其他指针非常相似。
但请注意,您可以使用构造函数的初始化列表直接初始化您的成员:
SomeUARTDevice::SomeUARTDevice(const CallbackStruct *sc)
: init_callback(sc->init)
, xmit_callback(sc->xmit)
// etc
{}