2011-10-18 4 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しか得ていません。 "self"オブジェクトの正確なタイプ(つまりrb_cStructまたはrb_eException)を取得するにはどうすればよいですか? ありがとうございます。

+1

これはC(明らかにC++)ではありません。 –

+0

間違って申し訳ありません。それはC + +です。 – BSalunke

答えて

1

でクラスを取得できます。これは適切なVALUEとなります。

+0

Tadmanさんに感謝します。しかし、自分の仕事でrb_obj_class(s​​elf)を試したときに大きな値(46912519449080)が返されるので、どのようにして自分の正確なタイプを得ることができますか? – BSalunke

+0

また、rb_cClassであるrb_obj_class(s​​elf)から値をreturedして比較したところ、正確な型が必要です。 – BSalunke

+0

'rb_funcall(rb_obj_class(s​​elf)、rb_intern(" to_s ")、0)'を使用して、いつでも文字列に変換できます。 – tadman

関連する問題