C++ void指向get struct的指针

Asw*_*win 1 c++ struct pointers

我正在努力学习无效指针.我想使用void指针获取传递的struct内容.

这是我的结构:

Main.cpp的

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

int main()
{   
    myclass mc;
    mc.initialize(myNode);
    getch();
}
Run Code Online (Sandbox Code Playgroud)

myclass.cpp

void initialize(void* data)
{
    //how to get passed struct here ?
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*aim 5

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

auto myStruct = static_cast<mynode*>(data);
Run Code Online (Sandbox Code Playgroud)

虽然,你的代码在使用中非常像C语言void*.

在C++中,建议您以模板的形式使用静态多态:

template<class Dependency>
void initialize(Dependency& data){/*...*/}
Run Code Online (Sandbox Code Playgroud)

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

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

struct MyNode : public BaseNode{};

void initialize (BaseNode* node){/*..*/};
Run Code Online (Sandbox Code Playgroud)

采用void*要想在C++实现通用的代码与C API的问题时,像POSIX或者Win32的通常是,在你的代码,你应该避免使用它们.