2014-09-02 70 views
0

原諒我,如果這是一個愚蠢的問題,但我不能讓我的頭圍繞以下一段代碼指針:類型轉換用的static_cast <>

struct myStruct 
    { 
    static void func1(const event, void* pthis) 
    { 
     myStruct& foo = *static_cast<myStruct*>(pthis); 

     if(event.action != ...).... return; 
     if(event.action == ...) foo.func2(); 
    } 

    void func2() 
    {} 
    } 

所以...... pthis澆鑄爲類型爲myStruct的靜態指針?這是否意味着foo是'reference to myStruct'的類型,並且等於pthis指向的值。

本質上,foo指向myStruct,而不訪問myStruct的實例?

我真的不明白這一點...

+0

'* static_cast'它在轉換後取消引用 – billz 2014-09-02 11:10:12

+1

[C++中指針變量和引用變量之間的區別是什麼?](https://stackoverflow.com/questions/57483/what-are-the-differences在指針變量和參考變量中,rq = 1) – 2014-09-02 11:14:05

+0

爲什麼'func1()'只接受'myStruct'的引用?這個設計的目的是什麼......我的頭真的無法繞過那個:( – 2014-09-02 12:45:36

回答

4

所以...... pthis被強制轉換爲類型MYSTRUCT的靜態指針?

A static_caststatic變量無關。在Regular cast vs. static_cast vs. dynamic_cast中解釋了static_cast可用於將隱式轉換反轉爲void指針。

本質上,foo指向myStruct,不訪問myStruct的實例?

不,foo不是「指向」任何東西。 foo是被綁定到由pThis取消引用的對象的引用。 foo可以調用成員方法,就像(*pThis)可以。

+0

所以foo是一個引用,用於調用myStruct的成員函數。感謝static_cast void指針pthis可以用作任何類型的指針? – Forcetti 2014-09-02 12:43:28