2011-10-18 24 views
2

嗨。我正在研究Ruby C++擴展,我有以下函數,其中「self」對象是結構類型或Exception類型。如何在Ruby擴展C++中獲取確切類型的對象?

VALUE myFunction(VALUE self, VALUE args) 
{ 
    // Some functon call and process on args argument 
} 

現在,在上面的函數我需要知道對象的「自我」的確切類型(即rb_eException或rb_cStruct) 我使用以下API試過,

if(Qtrue == rb_obj_is_kind_of(self, rb_eException)) 
{ 
    std::cout<<"self is of rb_eException type "<<std::endl; 
} 

像以上對rb_cStruct ,rb_cClass等,但我只獲得「rb_cClass」類型的Qtrue。 如何獲得「自我」對象的確切類型(即rb_cStruct或rb_eException)? 在此先感謝。

+1

這不是C(顯然是C++)。 –

+0

抱歉,錯誤。你的C++。 – BSalunke

回答

1

你可以得到類rb_obj_class這將是適當的VALUE

+0

謝謝Tadman,但是當我在我的功能中嘗試rb_obj_class(s​​elf)時,它會返回大的值(即46912519449080),那麼我如何才能獲得確切類型的自我? – BSalunke

+0

另外我比較了從rb_obj_class(s​​elf)返回的值,它是rb_cClass,我需要確切類型。 – BSalunke

+0

你總是可以將它轉換爲一個字符串:'rb_funcall(rb_obj_class(s​​elf),rb_intern(「to_s」),0)',對不對? – tadman