C++ C++;ulong到类方法指针并返回

C++ C++;ulong到类方法指针并返回,c++,c,casting,C++,C,Casting,我使用哈希表(Google Inc.的源代码)存储一些方法指针,定义如下: 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, A

我使用哈希表(Google Inc.的源代码)存储一些方法指针,定义如下:

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 ) );
给出了以下编译错误:

src/executor.cpp:45: error: invalid cast from type ‘ulong’ to type ‘Object* (Executor::*)(vframe_t*, Node*)’
我在x86GNU/Linux机器上使用GCC v4.4.3


有什么提示吗?

如果我没记错的话,由于实现细节的原因,类方法指针可能比普通函数指针大。这就解释了为什么编译器不允许这种强制转换——方法指针不能放入“普通”指针的存储空间中


这个解决方案,正如我在上面的评论中所说的,是使用一个允许C++类型的任意类型的C++哈希表实现。< /P>为什么你使用一个非类型的C哈希表实现而不是一个正确类型的C++类?我应该修改很多代码来使用模板哈希表类来代替C实现,有没有使用这个解决方案?你可以使用STL map类或tr1::unordered_map来避免自己编写。我尝试过这些类,相信我,我使用的库比它们快得多。“我需要一个非常快速的密钥查找机制。这个项目。无论如何:我将使用STD::地图现在:”Simone:如果我记得正确,谷歌也有一个集合库C++。但现在找不到了。

src/executor.cpp:45: error: invalid cast from type ‘ulong’ to type ‘Object* (Executor::*)(vframe_t*, Node*)’