我正在尝试学习 void 指针。我想使用 void 指针获取传递的结构内容。
这是我的结构:
main.cpp
struct mynode
{
int id;
int amt;
};
struct mynode* myNode;
int main()
{
myclass mc;
mc.initialize(myNode);
getch();
}
我的类.cpp
void initialize(void* data)
{
//how to get passed struct here ?
}
最佳答案
好吧,你可以将指针转换回原来的结构:
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,在您的代码中您应该避免它们。
关于C++ void指针获取结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40637827/