【发布时间】:2020-05-19 18:31:00
【问题描述】:
我有以下非常简单的代码,它定义了一个 B 类,该 B 类将一个指向 A 类对象的指针作为参数。
如果我将它编译为独立的 C++,代码可以完美运行,但我无法使用 Rcpp 公开 B 类。我一定在接近结尾的.constructor<A>() 行中做错了。尝试了 &、* 等的所有组合,但没有任何效果。经过几个小时的尝试,我迷路了。欢迎任何想法。
#include <Rcpp.h>
using namespace Rcpp;
class A {
public:
A(int val_) { val = val_; }
int val;
};
class B {
public:
B(A& ptr_) { ptr = &ptr_; }
int getval() { return (this->ptr->val); }
A *ptr;
};
RCPP_MODULE(module_cpp) {
using namespace Rcpp;
class_<A>("A")
.constructor<int>()
.field("val", &A::val)
;
class_<B>("B")
.constructor<A>()
;
}
【问题讨论】:
-
我已经考虑了一段时间,但您确定我们允许以这种方式继承吗?我认为大多数 Rcpp 模块使用更简单,并且只做一层(可能像我在 Rcpp Annoy 中那样进行模板化)。
-
@DirkEddelbuettel:我还没有见过这样的 Rcpp 示例,但这是对象的常见用法。例如,A 可以是一个城市,B 可以是一个人。然后可以问诸如“此人居住的城市的温度是多少?”之类的问题。 B 不是从 A 继承的,只是有一个指向 A 的指针。