使用结构和字符的 Rcpp C/C++*
Posted
技术标签:
【中文标题】使用结构和字符的 Rcpp C/C++*【英文标题】:Rcpp C/C++ using structs and char* 【发布时间】:2013-10-22 08:49:33 【问题描述】:C/C++ 和 Rcpp 的新手。
我目前正在尝试修改我找到的示例(在本例中,我修改了“yada”模块示例http://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-modules.pdf)并扩展它们以测试我的理解。
我当前编译的示例没有预期的行为。我猜我遗漏了一些东西,但我无法确定我在文档中找到的内容。任何帮助将不胜感激。
示例代码如下。
library(inline)
fx=cxxfunction(,plugin="Rcpp",include='#include<Rcpp.h>
#include<string>
typedef struct containerForChars const char *b; containChar;
containChar cC;
const char* toConstChar(std::string s)return s.c_str();
void setB(std::string s)
cC.b = toConstChar(s);
std::string getB(void)
std::string cs = cC.b;
return cs;
RCPP_MODULE(ex1)
using namespace Rcpp;
function("setB",&getB);
function("getB",&getB);
')
mod=Module("ex1",getDynLib(fx))
f<-mod$setB
g<-mod$getB
f("asdf")
g()
我收到以下错误,而不是 f("asdf")
将 cC.b
设置为 "asdf"
,
Error in f("asdf") : unused argument ("asdf")
我希望f()
的参数将设置为cC.b
的值,g()
将检索或获取我使用f
设置的值。我的猜测是 Module 和 RCPP_MODULE 所做的任何魔法都无法使用我定义的结构。我想希望它能够工作还不够:P。
【问题讨论】:
"但是,没有预期的行为。"为了能够帮助您,您必须告知我们您期望的行为是什么? 编辑了底部的问题,对代码有一点动机。 【参考方案1】:常见的错字。而不是
function("setB",&getB);
function("getB",&getB);
做
function("setB",&setB); # set, not get
function("getB",&getB);
然后一切正常:
R> f("asdf")
R> g()
[1] "asdf"
R>
我还要在顶部添加library(inline)
。
【讨论】:
以上是关于使用结构和字符的 Rcpp C/C++*的主要内容,如果未能解决你的问题,请参考以下文章