使用void *封装简单对象与复杂对象
有时候,我们会想将不同类型的数据对象通过一个参数传入。当然确实可以通过将这两个对象封装成一个自定义类的对象来进行传递。但是这样的话就需要新定义一个的类,有时候这两个对象是不搭边的,那么定义出来的这个类也就没有什么价值。
我想到了void * ,既然这个被称为是万能指针,是不是可以将步同的对象封装在void*中传递呢?
我想到了方法:
测试源代码如下
#include <iostream>
#include <stdlib.h>
using namespace std;
class test{
public:
int m_iPost;
int m_iId;
};
int main (){
void *pTemp = (void *)malloc(1*sizeof (int)+1*sizeof (test));//准备封装一个int对象和test对象
//前部分简单对象
*(int*)pTemp = 1;
//后部分复杂对象
test *obj = new test();
obj->m_iId = 2;
obj->m_iPost = 3;
//添加处理过程
memcpy((char*)pTemp+4*sizeof(char), obj, sizeof (*obj));
//还原方法
cout << *(int*)pTemp << endl;//还原的简单对象
test *obj1 = new test();//还原的复杂对象中的数据
memcpy(obj1, (char*)pTemp+4*sizeof(char), sizeof (*obj));
cout << ((test *)((char*)pTemp+4))->m_iId << ((test *)((char*)pTemp+4))->m_iPost << endl;
system("pause");
return true;
}
补充:从"abcdefgh9876wwww"获取“9876”
源代码
#include <iostream>
#include <stdlib.h>
using namespace std;
int main (){
char *chBuf = (char *)malloc(sizeof (int));
memset (chBuf, 0, 4);
char *chSource = "abcdefgh9876wwww";
strncpy (chBuf, chSource+8, 4);
int iNum = atoi (chBuf);
cout << iNum << endl;
system("pause");
return true;
}

本文探讨了如何利用void*指针在C++中封装不同类型的对象,并通过内存复制实现对象间的传递和复原,展示了其在数据类型多样性场景下的应用。
701

被折叠的 条评论
为什么被折叠?



