是否可以在 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,那么对于单个包来说,这会涉及更多。
我们正在使用 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,那么对于单个包来说,这会涉及更多。