我使用哈希表(由谷歌公司的源代碼),用於存儲被定義爲一些方法指針:C++ ULONG類方法指針和背面
typedef Object *(Executor::*expression_delegate_t)(vframe_t *, Node *);
凡明顯「執行人」是類。
函數原型插入一些值,以哈希表:
hash_item_t *ht_insert(hash_table_t *ht, ulong key, ulong data);
所以基本上我做的是插入雙鑄造方法指針:
ht_insert(table, ASSIGN, reinterpret_cast<ulong>((void *)&Executor::onAssign));
凡table
被定義爲在Executor類的聲明中'hash_table_t *
',ASSIGN
是一個無符號長整型值,'onAssign
'是我必須映射的方法。
現在,Executor::onAssign
被存儲爲一個無符號長整型值,它的地址在內存中,我認爲,我需要將ulong轉換回方法指針。但是這個代碼:
hash_item_t* item = ht_find(table, ASSIGN);
expression_delegate_t delegate = reinterpret_cast <expression_delegate_t> (item->data);
給了我下面的編譯錯誤:
src/executor.cpp:45: error: invalid cast from type ‘ulong’ to type ‘Object* (Executor::*)(vframe_t*, Node*)’
我使用一個x86下的GNU/Linux機器GCC v4.4.3。
任何提示?
爲什麼使用非類型化的C哈希表實現而不是正確類型的C++類? – 2010-03-29 15:34:12