使用void *封装简单对象与复杂对象并将之还原

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

使用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;
}






评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值