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
相关产品推荐
相关产品推荐

