2016-11-16 85 views
1

我在学习void指针。我想使用void指针来获取传递的结构内容。C++ void指针得到结构体

这里是我的结构:

Main.cpp的

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

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

myclass.cpp

+4

您需要将指针转换回结构类型。我的问题是**为什么**你想这样做? – UnholySheep

+5

你的例子不会编译,也是真的C.你不应该在C++中使用void指针。你想达到什么目标(除了“学习虚空指针”) – djgandy

+0

@UnholySheep我怎么能把它放回去?像(结构*)数据? – Aswin

回答

5

很好,可以转换指针回到原来的结构:

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

虽然,您的代码在使用void*时非常类似C-like。

在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,并且在你的代码中你应该避免它们。