我有一個叫做multicool的R包,用於處理multisets的排列。目前,在內部,存在一個C++類,並且調用initMC會創建一個類Multicool類的新對象,然後可以完成我需要的所有事情。但是,沒有簡單的方法來釋放分配給此對象的內存。這對於簡單的用途並不重要,但我有一個可能會調用這個數十萬次的應用程序。Rcpp導出的模塊沒有暴露
我認爲,解決方案是使用Rcpp模塊將類暴露給R。不過,我試圖按照指示,我得到的錯誤:
錯誤:對象「mcModule」未找到
開始 - 我只是想揭露的對象和它的構造。這是我的類定義
#include <Rcpp.h>
using namespace Rcpp;
using namespace std;
class Multicool{
struct list_el {
int v;
struct list_el * n;
};
typedef struct list_el item;
item *h;
item *t;
item *i;
int *m_pnInitialState;
int *m_pnCurrState;
int m_nLength;
bool m_bFirst;
public:
// constructor
Multicool(IntegerVector x){
int nx = (int)x.size();
}
};
,然後我出口類以及
RCPP_MODULE(mcModule){
using namespace Rcpp;
class_<Multicool>("Multicool")
.constructor<IntegerVector>()
;
}
我添加了這行
import(Rcpp)
到我的空間文件
我的構造已添加
RcppModules: mcModule
到我的描述文件
和我在.onLoad功能
.onLoad <- function(libname, pkgname) {
loadRcppModules()
}
這一切編譯和封裝建立毫無怨言加入loadRcppModules通話。但是,當我創建一個新的MULTICOOL對象,我得到上述錯誤
> library(multicool)
> Multicool = mcModule$Multicool
Error: object 'mcModule' not found
任何幫助或建議,將不勝感激
你有沒有看到我的其他修改? –
是的,謝謝@ dirk-eddelbuettel –