初始化指向typedef结构的指针

时间:2017-04-10 10:37:00

标签: c++ pointers struct

我已经在这个主题上阅读了关于SO的类似主题(How to initialize a Pointer to a struct in C?Initializing a pointer to a structure) 但尝试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;

它实际上没有任何东西。我是一个新手,显然错过了重要的事情。这是一种正确的方法吗?

P.S。上面的代码来自mstp-lib。我在VS2015。

1 个答案:

答案 0 :(得分:1)

因为您实际上没有初始化。 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);