这可能是一个愚蠢的问题,但我认为CharacterVector
的每个元素都是std::string
。但是,这不起作用:
std::string hello(CharacterVector vec) {
std::string result = vec[0];
return result;
}
错误:候选构造函数不可行:没有已知的从'Proxy'(又名'string_proxy< 16>')到'const_pointer'(又名'const char *')的第一个参数的转换
如果是这样,我们应该在获得std::string
之类的C ++好处之前强制转换为empty()
?
答案 0 :(得分:5)
有时您需要帮助编译器。
转换器Rcpp::as<T>()
从 R转换,转换器Rcpp::wrap()
将转换为 R.
R> cppFunction('std::string hello(CharacterVector vec) {
return as<std::string>(vec[0]); }')
R> hello(c("The", "quick", "brown", "fox"))
[1] "The"
R>
这都记录在案,并且有大量的例子。很可能找到更智能的模板编程来自动化这种转换,如果是这样,我们很乐意看到补丁。
对于问题的第二部分:这些来自R,不知道或有std::string
。我们有轻量级的包装类,通常避免复制。因此Rcpp::CharacterVector
- 您可以转换为std::vector<std::string>
。
编辑2016年末:请注意,我们也可以
R> cppFunction("std::string f(CharacterVector x,int i) {return std::string(x[i]);}")
R> foo(c("The", "quick", "brown", "fox"), 1)
[1] "quick"
R>