我正在尝试在Rcpp的帮助下将我用R的ReferenceClasses编写的离散事件模拟移植到C ++。我已根据访问或修改内部数据和其他特征的需要,将我的代码先前组织到各个类中。以前,我成功地使用了ReferenceClasses,它将这些子类组织成单元级数据,然后另一个ReferenceClass包含模拟中所有对象的List。
我用Rcpp创建基类没有问题,但是一旦我开始创建一个容器类,它使用了子类元素的构造函数,我的R实例开始崩溃。然后我尝试使容器类成员成为一个指针,它减少了编译器所遇到的问题数量,但仍然无效。我不知道下一步该做什么......
以下是不现在为我工作的代码的简短示例:
// forward declarations
class insider;
class container;
#include <Rcpp.h>
using namespace Rcpp;
class insider {
public:
NumericVector a;
NumericMatrix b;
insider( NumericVector a_, NumericMatrix b_) : a( a_ ), b( b_ ) {}
insider( const insider & i ) : a( i.a ), b( i.b ) {}
NumericVector getA() { return a; }
NumericMatrix getB() { return b; }
};
class container {
public:
insider *ins;
container(insider ins_) : ins( new insider( ins_ ) ) {}
~container() { delete ins; }
insider getInsider() { return *ins; }
};
RCPP_EXPOSED_CLASS(insider)
RCPP_EXPOSED_CLASS(container)
RCPP_MODULE(mod) {
class_<insider>("insider")
.constructor< NumericVector, NumericMatrix >()
.constructor< insider >()
.method("getA", &insider::getA)
.method("getB", &insider::getB)
;
class_<container>("container")
.constructor< insider >()
.method("getInsider", &container::getInsider)
;
}
/*** R
library(Rcpp)
insider <- mod$insider
container <- mod$container
a <- new(insider, 1:10, matrix(1:20, ncol = 2))
b <- new(container, a)
a$getA()
a$getB()
b$getInsider()$getA()
b$getInsider()$getB()
*/
编辑:
我在代码中发现了语法错误(现在编辑,所以代码是最新的),现在代码编译并运行。与错字协调,这让我拖了很长时间。
原始问题:
insider(const insider & i) {
a = i.a;
b = i.b;
}
更新至:
insider( const insider & i ) : a( i.a ), b( i.b ) {}
原件:
container() : ins() {}
void container_insider(insider ins_) { ins = new insider; *ins = ins_; }
更新至:
container(insider ins_) : ins( new insider( ins_ ) ) {}
希望最终帮助其他人继续前进!
答案 0 :(得分:1)
根据上面的编辑,找到了'内部'复制构造函数&amp;的问题。 'container'构造函数,以及原始RCPP_MODULE宏调用的一些小问题。