You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:36:04