2016-05-13 121 views
0

我过去所有的PARAM的数据结构作为void*我的功能:如何从C++中的void指针复制数据?

void func(void* param, size_t size) { 
    // here I need copy data from param 
    void * copy_data = malloc(size); 
    memcpy(copy_data, param, size); 
    ... 
} 

// call it like this 
func(&data, sizeof(data)); 

当参数是struct且有物体里面是这样的:

struct data { 
    CustomClass object; 
}; 

memcpy不会复制真实数据在object

有没有办法从void*复制真实数据?如果没有,关于它的最佳实践是什么?我认为肯定有人问过这样的问题,我只是找不到它:-)

+0

你是怎么用'data'调用'func'的? – Ajay

+2

深拷贝构造函数是为此设计的。 –

+0

@ Jean-BaptisteYunès但是我无法从'void *'中获取数据类型,在'func'中会有很多类型。 – zzy

回答

2

您可以使用模板吗?

template<class T> 
void func(T const& param) { 
    // here I need copy data from param 
    T copy_data = param; 
    ... 
} 

// call it like this 
func(data); 
+0

谢谢,就是这样! – zzy

3

理想情况下,您不能使用void*以及结构和类。 struct/class可能不是POD(普通对象数据 - 只有数据,没有虚函数,构造函数,析构函数,继承等)。更好地编写自定义代码来复制类,最好是在类本身中。这就是为什么我们有拷贝构造函数,赋值操作符来覆盖。

后来,当您了解和了解更多语言时,您可以编写基于模板的代码。

+0

谢谢!我认为模板是我想要的。 @Simple回答ealier,所以我会接受他的回答:-) – zzy