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

时间:2016-07-02 08:17:24

标签: c++ pointers syntax function-pointers

我正在尝试开发一种用于微控制器的嵌入式库,其中(可能是徒劳的)尝试成为设备通用的。基本上,我在标题中声明了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,我会迅速将其作为一个例子来展示这个问题,而不会让主要的工作变得混乱。

1 个答案:

答案 0 :(得分:0)

看起来很好。函数指针的工作方式与任何其他指针一样。

但请注意,您可以使用构造函数的初始化列表直接初始化您的成员:

SomeUARTDevice::SomeUARTDevice(const CallbackStruct *sc)
    : init_callback(sc->init)
    , xmit_callback(sc->xmit)
    // etc
{}