是否可以在 R 包之间共享 C++ 类?

Is it possible to share C++ classes between R-Packages?

我们正在使用 Rcpp 用 C++ 编写一个相当大的模拟。我们想重构代码并将它使用的一些 C++ 类 放在单独的包中,因为我们也想在其他包的 C++ 代码中使用这些 类。 是否有可能做到这一点?

我看过 // [[Rcpp::interfaces(r, cpp)]] 属性,但据我了解,这仅适用于返回可由 R 解释的对象的函数。Rcpp 模块可以公开 C++ 类 到 R,但也可以将 C++ 类 公开给其他 C++ 代码?

是的。有几种方法。最简单的是,如果 C++ 库是 header-only,因为它可以嵌入 inst/include 中,正如@duckmayr 指出的那样。

可在此处找到 header-only 包含的缩小示例:

https://github.com/r-pkg-examples/rcpp-shared-cpp-functions


另一方面,如果代码应该在 .cpp 个文件之间的同一个包内共享,那么另一种方法是在 src/ 中使用 header 个文件11=] 文件。可以在此处找到这方面的示例:

https://github.com/r-pkg-examples/rcpp-headers-src

如果您需要 src/ 目录中的 sub-folders,那么对于单个包来说,这会涉及更多。

https://github.com/r-pkg-examples/rcpp-headers-subdirs