2012-04-18 71 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