C ++ ulong到类方法指针和返回

时间:2010-03-29 15:25:30

标签: 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, ASSIGN, reinterpret_cast<ulong>( (void *)&Executor::onAssign ) );

其中table在Executor类的声明中定义为“hash_table_t *”,ASSIGN是无符号长值,“onAssign”是方法我必须映射。

现在,Executor::onAssign存储为unsigned long值,我认为它在内存中的地址,我需要将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。

任何提示?

1 个答案:

答案 0 :(得分:3)

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

正如我在上面的评论中所述,解决方案是使用适当的C ++哈希表实现,它允许通过C ++模板实现任意类型。

相关问题