2016-11-16 210 views
1

我在學習void指針。我想使用void指針來獲取傳遞的結構內容。C++ void指針得到結構體

這裏是我的結構:

Main.cpp的

struct mynode 
{ 
    int id; 
    int amt; 
}; 
struct mynode* myNode; 

int main() 
{ 
    myclass mc; 
    mc.initialize(myNode); 
    getch(); 
} 

myclass.cpp

+4

您需要將指針轉換回結構類型。我的問題是**爲什麼**你想這樣做? – UnholySheep

+5

你的例子不會編譯,也是真的C.你不應該在C++中使用void指針。你想達到什麼目標(除了「學習虛空指針」) – djgandy

+0

@UnholySheep我怎麼能把它放回去?像(結構*)數據? – Aswin

回答

5

很好,可以轉換指針回到原來的結構:

auto myStruct = static_cast<mynode*>(data); 

雖然,您的代碼在使用void*時非常類似C-like。

在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,並且在你的代碼中你應該避免它們。