将构造函数的函数指针存储到私有变量

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
{}