问题描述
如何为包含 Rcpp::wrap
类的类编写 Rcpp::as
和 Rcpp
方法?
例如,以下 .cpp
文件使用 sourceCpp()
编译:
#include <Rcpp.h>
namespace Rcpp {
class myVector {
public:
NumericVector data;
myVector(NumericVector v) : data(v) {};
};
template <> myVector as(SEXP v) {
return myVector(v);
}
template <> SEXP wrap(const myVector& v) {
return v.data;
}
}
//[[Rcpp::export]]
Rcpp::myVector test(Rcpp::myVector& x){
return x;
}
在这个例子中,我们创建了一个向量,它只包含一个 Rcpp 类 (NumericVector
) 和一个 Rcpp::as
和 Rcpp::wrap
方法,以便它可以用作参数在任何导出的函数中。
但是创建Rcpp包的时候代码没有通过,如下:
test.cpp
没有投诉,但 src/RcppExports.cpp
有投诉。这是相关的功能:
// test
Rcpp::myVector test(Rcpp::myVector& x);
RcppExport SEXP _test_test(SEXP xSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< Rcpp::myVector& >::type x(xSEXP);
rcpp_result_gen = Rcpp::wrap(test(x));
return rcpp_result_gen;
END_RCPP
}
错误是:
Line 19: `myVector` does not name a type;
Line 24: `myVector` was not declared in this scope
... template argument 1 invalid,qualified-id in declaration,'x' not declared,'test' not declared... side-effects of above two errors.
我知道如何为不包含 Rcpp 类 (templated case,general case) 的类编写 Rcpp::as
和 Rcpp::wrap
:
#include <RcppCommon.h>
- 类的前向声明,可能依赖于 C++ 库(不是
Rcpp.h
) #include <Rcpp.h>
不幸的是,Rcpp::myVec
需要 Rcpp.h
,因此不能在包含 Rcpp.h
之前声明。
包含 Rcpp 类的外部类是否可以使用 Rcpp::wrap
和 Rcpp::as
?如果是这样,我可以查看任何先例以了解详细信息吗?尽管进行了相当多的搜索,但我还是没有找到任何东西,或者我可能忽略了一些非常简单的东西。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)