初始化指向 typedefs 结构的指针

Initializing a pointer to structure of typedefs

本文关键字:指针 结构 typedefs 初始化      更新时间:2023-10-16

我已经阅读了有关此主题的类似线程(如何在 C 中初始化指向结构的指针?初始化指向结构的指针(但尝试newmalloc失败。我有一堆像这样的typedefs

typedef void  (*STP_CALLBACK_ON_TOPOLOGY_CHANGED)       (BRIDGE* bridge);
typedef void* (*STP_CALLBACK_ALLOC_AND_ZERO_MEMORY)     (unsigned int size);
typedef void  (*STP_CALLBACK_FREE_MEMORY)               (void* p);
typedef void  (*STP_CALLBACK_ENABLE_LEARNING)           (BRIDGE* bridge, unsigned int portIndex, unsigned int treeIndex, bool enable);

形成结构

    struct STP_CALLBACKS
    {
      STP_CALLBACK_ON_TOPOLOGY_CHANGED      onTopologyChanged;
      STP_CALLBACK_ALLOC_AND_ZERO_MEMORY    allocAndZeroMemory;
      STP_CALLBACK_FREE_MEMORY              freeMemory;
      ...
    };

当我想初始化指向此结构的指针时

const STP_CALLBACKS *callbacks = new STP_CALLBACKS;

它实际上什么都不进去。我是一个新手,显然错过了一些重要的东西。什么是正确的方法?

附言上面的代码来自 mstp-lib。我在VS2015上。

因为你实际上并没有初始化。Typedef 只是声明一个类型。new上面所做的只是为 4 个函数指针分配内存。要初始化此内存,您需要构造函数:

struct STP_CALLBACKS { 
    STP_CALLBACKS(STP_CALLBACK_ON_TOPOLOGY_CHANGED _fp1, ...
...

然后,具有要调用的实际函数,例如func1,func2,...您可以初始化结构:

void func1(BRIDGE* bridge) {
   ...
}
STP_CALLBACKS callbacks(func1, ...

然后回调你的函数:

BRIDGE bridge;
callbacks.onTopologyChanged(&bridge);