我来解释原因
your solution
RCPP_MODULE(A)
您正在暴露C++结构
A
作为R中的一个参考类。这是自动完成的。但是,当你打电话的时候
Bobj <- new(B, Aobj)
没有信息如何从这个引用类转换为所需的C++结构。通过使用
RCPP_EXPOSED_CLASS(A)
你正在创造
Rcpp::wrap
和
Rcpp::as
用两种方式在C++和R对象之间转换。因为我们只缺了R到C++的转换,即
Rcpp::作为
,以下内容也足够了:
#include <RcppCommon.h>
struct A;
RCPP_EXPOSED_AS(A)
#include <Rcpp.h>
struct A {
Rcpp::NumericVector y;
A(Rcpp::List x)
: y(Rcpp::as<Rcpp::NumericVector>(x["foo"]))
{
Rcpp::Rcout << y;
}
};
struct B {
B(A x) { }
};
RCPP_MODULE(A) {
Rcpp::class_<A>("A")
.constructor<Rcpp::List>();
}
RCPP_MODULE(B) {
Rcpp::class_<B>("B")
.constructor<A>();
}
/*** R
Aobj <- new(A, list(foo=1:3))
Bobj <- new(B, Aobj)
*/