在 Rcpp 的另一个 cpp 文件中定义的函数中使用一个 cpp 文件中定义的函数
Use function defined in one cpp file in function defined in another cpp file in Rcpp
我在文件 add.cpp 中定义了一个名为 add
的 c++ 函数(add.cpp[=36 的内容=] 下面):
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double add(double a, double b) {
return a + b;
}
我在 multiplyandadd.cpp 文件中定义了另一个名为 multiplyandadd
的 c++ 函数(multiplyandadd.cpp[ 的内容=36=] 下面)从上面调用 add
函数:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double multiplyandadd(double a, double b, double c) {
return c*add(a, b);
}
为了让它工作,我想我应该在子文件夹 /inst/include[= 中创建一个头文件 add.h我的包的 36=] 并在 add.h...
中定义函数 add
add.h的内容应该是什么?如何在add.h中定义这个函数add
以便编译包?
我确信这是非常基本的,之前可能已经回答过很多次,并且用大量示例进行了很好的记录...只是碰巧我在阅读文档和 Whosebug 答案的几个小时内找不到示例, ...
好的。想通了... :)
add.h:
//add.h
#ifndef __ADD_H_INCLUDED__ // if add.h hasn't been included yet...
#define __ADD_H_INCLUDED__ // #define this so the compiler knows it has been included
double add(double a, double b);
#endif
而且,我需要 src 中的 Makevars 内容:
PKG_CXXFLAGS = -I../inst/include
我理解这是最基本的东西。在某个地方有这样一个基本的例子会让第一次使用 Rcpp 的人更容易。
使用 header 时,您需要使用 inclusion guard。在包含保护中,提供适当的函数定义。如果您的函数有默认参数,请在 header 文件中包含默认参数 only。
例如:
inst/include/add.h
#ifndef PACKAGENAME_ADD_H
#define PACKAGENAME_ADD_H
double add(double a = 0.1, double b = 0.2);
#endif
src/add.cpp
#include <Rcpp.h>
#include <add.h>
// [[Rcpp::export]]
double add(double a, double b) {
return a + b;
}
src/multiplyandadd.cpp
#include <Rcpp.h>
#include <add.h>
// [[Rcpp::export]]
double multiplyandadd(double a, double b, double c) {
return c*add(a, b);
}
src/Makevars
PKG_CPPFLAGS = -I../inst/include/
我在文件 add.cpp 中定义了一个名为 add
的 c++ 函数(add.cpp[=36 的内容=] 下面):
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double add(double a, double b) {
return a + b;
}
我在 multiplyandadd.cpp 文件中定义了另一个名为 multiplyandadd
的 c++ 函数(multiplyandadd.cpp[ 的内容=36=] 下面)从上面调用 add
函数:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double multiplyandadd(double a, double b, double c) {
return c*add(a, b);
}
为了让它工作,我想我应该在子文件夹 /inst/include[= 中创建一个头文件 add.h我的包的 36=] 并在 add.h...
中定义函数add
add.h的内容应该是什么?如何在add.h中定义这个函数add
以便编译包?
我确信这是非常基本的,之前可能已经回答过很多次,并且用大量示例进行了很好的记录...只是碰巧我在阅读文档和 Whosebug 答案的几个小时内找不到示例, ...
好的。想通了... :)
add.h:
//add.h
#ifndef __ADD_H_INCLUDED__ // if add.h hasn't been included yet...
#define __ADD_H_INCLUDED__ // #define this so the compiler knows it has been included
double add(double a, double b);
#endif
而且,我需要 src 中的 Makevars 内容:
PKG_CXXFLAGS = -I../inst/include
我理解这是最基本的东西。在某个地方有这样一个基本的例子会让第一次使用 Rcpp 的人更容易。
使用 header 时,您需要使用 inclusion guard。在包含保护中,提供适当的函数定义。如果您的函数有默认参数,请在 header 文件中包含默认参数 only。
例如:
inst/include/add.h
#ifndef PACKAGENAME_ADD_H
#define PACKAGENAME_ADD_H
double add(double a = 0.1, double b = 0.2);
#endif
src/add.cpp
#include <Rcpp.h>
#include <add.h>
// [[Rcpp::export]]
double add(double a, double b) {
return a + b;
}
src/multiplyandadd.cpp
#include <Rcpp.h>
#include <add.h>
// [[Rcpp::export]]
double multiplyandadd(double a, double b, double c) {
return c*add(a, b);
}
src/Makevars
PKG_CPPFLAGS = -I../inst/include/