C ++ void指向get struct的指针

时间:2016-11-16 16:54:06

标签: c++ pointers struct

我正在尝试学习无效指针。我想使用void指针获取传递的struct内容。

这是我的结构:

Main.cpp的

struct mynode
{
    int id;
    int amt;
};
struct mynode* myNode;

int main()
{   
    myclass mc;
    mc.initialize(myNode);
    getch();
}

myclass.cpp

void initialize(void* data)
{
    //how to get passed struct here ?
}

1 个答案:

答案 0 :(得分:5)

好吧,你可以将指针强制转换回原始结构:

auto myStruct = static_cast<mynode*>(data);

尽管如此,使用void*时,您的代码非常类似于C语言。

在C ++中,我们鼓励您以模板的形式使用静态多态:

template<class Dependency>
void initialize(Dependency& data){/*...*/}

或动态多态,以继承和覆盖的形式:

struct BaseNode{
  virtual ~BaseNode() = default;
};

struct MyNode : public BaseNode{};

void initialize (BaseNode* node){/*..*/};

使用void*来实现C ++中的通用代码通常是在处理C API(如POSIX或Win32)时,在代码中应该避免使用它们。