【问题标题】:Rcpp C/C++ using structs and char*使用结构和字符的 Rcpp C/C++*
【发布时间】: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。

【问题讨论】:

  • "但是,没有预期的行为。"为了能够帮助您,您必须告知我们您期望的行为是什么?
  • 编辑了底部的问题,对代码有一点动机。

标签: c++ struct char constants rcpp


【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多