我正在尝试学习无效指针。我想使用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 ?
}
答案 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)时,在代码中应该避免使用它们。