我的問題是我需要表示一個指向類方法的指標,比如整數。所以函式沒有問題,例如void (*func)()容易轉換為數字,但是當我嘗試void (&SomeClass::SomeMethod)用任何方式轉換為整數時編譯說這是不可能的
不允許從 'void(ForthInterpreter::*)()' 到 long 的 C 樣式轉換
我試過了(size_t)&ForthInterpreter::CodeFLiteral,static_cast<size_t>(&ForthInterpreter::CodeFLiteral)但我得到了同樣的錯誤。應該假設指向函式和方法的指標之間存在主要區別,但它是什么?我怎樣才能成功施放它?我在 C 11 版本中使用 clang 。
uj5u.com熱心網友回復:
例如 void (*func)() 容易轉換為數字
不,不是,它只是在您的特定機器上看起來像。有些系統將指標表示為兩個內部值,例如 read about far pointers。
更不用說你邀請的 64 位問題,long是 x64 上的不同型別,gcc例如cl,兩個非常主流的編譯器。
當我嘗試以任何方式將 void (&SomeClass::SomeMethod) 轉換為整數時,編譯表示這是不可能的
絕對可以,因為不僅類成員指標存在與上述相同的問題,而且它絕對需要一個指向物件實體本身的指標(通常作為暫存器傳遞,通常又是ecxor rcx)。您無法以比指向正確型別的指標更便攜的方式來表示它。
我需要表示一個指向類方法的指標,比如整數
不,你不想,你只是想。那里有區別。解決方案是適應可能的情況。
uj5u.com熱心網友回復:
指向成員的指標不僅僅是一個簡單的指標,它要復雜得多。根據編譯器的實作,它可能是 2 個指標,一個指向物件,一個指向方法。或者它可以是一個物件指標和一個方法表的偏移量。等等。
因此,指向成員的指標根本不能像您嘗試做的那樣按原樣存盤在整數中。因此,您需要通過將指標存盤在整數中來找到另一個解決方案來解決您試圖解決的任何問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446155.html
上一篇:C,指標陣列中的值消失(指標)
下一篇:根據規范比較結構陣列
