RcppArmadillo开发R包时头文件使用相关问题咨询
RcppArmadillo包头文件复用问题解答
问题1解答
可以把部分代码移到头文件中,但要注意区分可移动和不可移动的内容:
- 可直接移到
header1.h和header2.h开头的内容:
上述代码会随头文件的引入自动被加载到所有引用该头文件的#include <RcppArmadillo.h> #include <omp.h> using namespace Rcpp;.cpp文件中,无需每个.cpp重复编写。 - 不可移到头文件的内容:
所有// [[Rcpp::xxx]]格式的属性注释,这类是Rcpp编译单个.cpp文件时识别的特殊标记,放在头文件中不会生效,必须保留在每个需要编译的.cpp文件头部。
另外注意你提供的header1.h里存在笔误,amra::sp_mat应为arma::sp_mat,否则会触发编译报错。
问题2解答
两种存放方案对应不同的使用场景,没有绝对的对错,按需选择即可:
- 如果你封装的C++函数仅在当前R包内部使用,不需要开放给其他R包调用:所有头文件(
header1.h、header2.h)和实现文件(header1.cpp、header2.cpp)都直接放在/src目录下即可,配置最简单。 - 如果你希望其他依赖你包的R包也能调用这些C++函数:需要把头文件放到
/inst/include目录下,可新增统一的packagename.h汇总引入所有子头文件,方便外部调用;但实现文件header1.cpp、header2.cpp仍然必须放在/src目录下,放在/inst/include下不会被编译。
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

