2012-04-18 13 views
1

C++ std::stringオブジェクトをRuby VALUEオブジェクトに変換するにはどうすればよいですか?C++ std :: string to Ruby VALUE

私はrb_str_new2(c_string)を試しましたが、動作しませんでした。

私は関数に

VALUE foo(){return rb_str_new2(c_string);}; 

を持っており、それはエラーメッセージを与える:

cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘const char*’ for argument ‘1’ to ‘size_t strlen(const char*)’ 
+1

、それは動作しませんでしたどのように?あなたのコードは何ですか? –

+3

rb_str_new2(string_object.c_str());仕事を楽にしなければなりません。 –

+2

変数が 'c_string'をCの文字列でないのはなぜですか? oO –

答えて

4

をあなたは関数にstd::stringを渡しているが、それは、NULLで終了const char *を期待しています。

std::string::c_str()メンバ関数は1を取得するために使用することができます。

rb_str_new_cstr(string.c_str()); 
+0

これと 'rb_str_new2'の違いは何ですか? 'rb_str_new_cstr'については多くの情報が見つかりません –

+0

@NiklasB、[彼らは同じ機能です](https://github.com/ruby/ruby/blob/trunk/README.EXT#L179)。 'rb_str_new_cstr'を好む理由は、関数がC文字列をパラメータとして受け取ることができるからです。 –

+1

はい、私はもっと説明的な別名かもしれないと思った。ありがとう、よく知っておいて、これを将来的に使用します:) –