2016-05-13 63 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