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

RcppEigen项目中头文件条件包含的实现及问题排查

RcppEigen包与纯C++库头文件兼容的预处理器宏选择问题

我拥有一个RcppEigen包pfexamplesinr,其中的.h头文件复制自我的另一个纯C库pf。两者头文件仅存在一处差异:纯C库中使用#include <Eigen/Dense>引入Eigen,而RcppEigen项目中需要使用#include <RcppEigen.h>。直接保留两份近乎相同的头文件会导致大量代码重复,因此我计划将纯C库作为Git子模块引入RcppEigen包,并编辑该C库的头文件,通过条件包含语句使其同时兼容纯C++项目和RcppEigen项目,设想的代码如下:

#ifdef DROPPINGTHISINRPACKAGE
    #include <RcppEigen.h>
#else
    #include <Eigen/Dense>
#endif

但我不确定应使用什么内容替代DROPPINGTHISINRPACKAGE,想了解RcppEigen包中的常规做法,以及这类包中预处理器会定义哪些可使用的宏。

补充说明

sourceCpp似乎忽略了我在Makevars中设置的宏。运行Rcpp::sourceCpp(file = "~/pfexamplesinr/src/likelihoods.cpp")时失败,报错提示某些特性仅在C17中可用,报错指向C库头文件中的这段代码:

#ifndef DROPPINGTHISINRPACKAGE
if constexpr(debug) 
    std::cout << "time: " << m_now << ", transposed sample: " << m_particles[ii].transpose() << ", log unnorm weight: " << m_logUnNormWeights[ii] << "\n";
#endif

内容的提问来源于stack exchange,提问作者Taylor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:23