2012-04-18 70 views
1

如何將C++ std::string對象轉換爲Ruby VALUE對象?我試過rb_str_new2(c_string),但它沒有奏效。C++ std :: string到Ruby VALUE

我有一個函數

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

它怎麼不起作用?你的代碼是什麼? – 2012-04-18 15:27:11

+3

rb_str_new2(string_object.c_str());應該輕鬆完成工作。 – 2012-04-18 15:34:52

+2

爲什麼你要調用變量'c_string',如果它不是C字符串? oO – 2012-04-18 15:53:14

回答

4

你傳入std::string的功能,但它需要一個空值終止const char *

std::string::c_str()成員函數可以被用來獲取一個:

rb_str_new_cstr(string.c_str()); 
+0

這和'rb_str_new2'有什麼區別?找不到關於'rb_str_new_cstr'的​​更多信息[ – 2012-04-18 15:39:36

+0

@NiklasB,[它們是相同的函數](https://github.com/ruby/ruby/blob/trunk/README.EXT#L179)。我更喜歡'rb_str_new_cstr',因爲我可以推斷該函數將C字符串作爲參數。 – 2012-04-18 15:43:08

+1

是的,我認爲這可能只是一個更具描述性的別名。謝謝,很高興知道,將在未來使用此:) – 2012-04-18 15:45:41