[Rcpp-devel] [R-pkg-devel] moving from C to C++ with Rcpp in R package

Dirk Eddelbuettel edd at debian.org
Fri Jun 3 15:38:29 CEST 2022


On 2 June 2022 at 19:27, Jean Thioulouse wrote:
| 
| But it seems that the C_ prefix must be added to _myPackage_myFunctionName (to get for example C__ade4_RVrandtestCpp) in the RcppExports.R file. So where should I modify the Rcpp::export tag ?

Just how I wrote it below: inside the parens of the Rcpp::export tag.

A full worked example is

   #include <Rcpp.h>

   // [[Rcpp::export(C_foo)]]
   bool foo() {
     return true;
   }

   /*** R
   C_foo()
   */


which when I sourceCpp() it does indeed do as it is told:

   > Rcpp::sourceCpp("/tmp/foo.cpp")

   > C_foo()
   [1] TRUE
   > 

A quick grep here did not reveal an actual example of where I prefix with C_
but for example in the RcppSimdJson package we use this a little bit to
massage function names and control what is, or isn't, visible and exported on
the R side:

   edd at rob:~/git$ grep Rcpp::export rcppsimdjson/src/*cpp
   rcppsimdjson/src/deserialize.cpp:// [[Rcpp::export(.deserialize_json)]]
   rcppsimdjson/src/deserialize.cpp:// [[Rcpp::export(.load_json)]]
   rcppsimdjson/src/deserialize.cpp:// [[Rcpp::export(.exceptions_enabled)]]
   rcppsimdjson/src/exported-utils.cpp:// [[Rcpp::export(is_valid_json)]]
   rcppsimdjson/src/exported-utils.cpp:// [[Rcpp::export(is_valid_utf8)]]
   rcppsimdjson/src/exported-utils.cpp:// [[Rcpp::export(fminify)]]
   rcppsimdjson/src/internal-utils.cpp:// [[Rcpp::export(.is_valid_json_arg)]]
   rcppsimdjson/src/internal-utils.cpp:// [[Rcpp::export(.is_valid_query_arg)]]
   rcppsimdjson/src/internal-utils.cpp:// [[Rcpp::export(.diagnose_input)]]
   rcppsimdjson/src/rcppsimdjson_utils_check.cpp:// [[Rcpp::export(.check_int64)]]
   rcppsimdjson/src/simdjson_example.cpp:// [[Rcpp::export(.validateJSON)]]
   rcppsimdjson/src/simdjson_example.cpp:// [[Rcpp::export]]
   rcppsimdjson/src/simdjson_example.cpp:// [[Rcpp::export(.cppVersion)]]
   rcppsimdjson/src/simdjson_example.cpp:// [[Rcpp::export(.unsupportedArchitecture)]]
   edd at rob:~/git$ 

Hope this helps,  Dirk


| Thanks
| Jean
| 
| 
| > Le 2 juin 2022 à 15:49, Dirk Eddelbuettel <edd at debian.org> a écrit :
| > 
| > 
| > On 2 June 2022 at 08:32, Dirk Eddelbuettel wrote:
| > | 
| > | (Removed CC to r-package-devel)
| > | 
| > | On 2 June 2022 at 16:24, Ivan Krylov wrote:
| > | | Unfortunately, this means editing RcppExports.R, which (I think)
| > | | prevents you from enjoying the way Rcpp::compileAttributes() sets
| > | | everything up for you.
| > | 
| > | Yes. I think that is the best I came up with once too in a time of need in a
| > | package actively mixing C and C++.  It simply is easier to have just C++, and
| > | I think you generally can just convert your C files.
| > 
| > PS  One thing that works is to rename in the Rcpp::export tag ie
| > 
| >   // [[Rcpp::export(C_my_func_name)]]
| > 
| > can be used to prefix C_ to a function my_func_name().
| > 
| > Dirk
| > 
| > -- 
| > dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
| > _______________________________________________
| > Rcpp-devel mailing list
| > Rcpp-devel at lists.r-forge.r-project.org
| > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
| 

-- 
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org


More information about the Rcpp-devel mailing list