J’essaie d’ouvrir un fichier dans une fonction Rcpp , j’ai donc besoin du nom de fichier sous la forme d’un caractère * ou std :: ssortingng
Jusqu’à présent, j’ai essayé ce qui suit:
#include #include #include #include RcppExport SEXP readData(SEXP f1) { Rcpp::CharacterVector ff(f1); std::ssortingng fname = Rcpp::as(ff); std::ifstream fi; fi.open(fname.c_str(),std::ios::in); std::ssortingng line; fi >> line; Rcpp::CharacterVector rline = Rcpp::wrap(line); return rline; }
Mais apparemment, as
cela ne fonctionne pas pour Rcpp::CharacterVector
car je reçois une erreur de compilation.
foo.cpp: In function 'SEXPREC* readData(SEXPREC*)': foo.cpp:8: error: no matching function for call to 'as(Rcpp::CharacterVector&)' make: *** [foo.o] Error 1
Existe-t-il un moyen simple d’obtenir une chaîne à partir de l’argument ou d’ouvrir en quelque sorte un fichier à partir de l’argument de la fonction Rcpp?
Rcpp::as()
attend un SEXP
en entrée, pas un Rcpp::CharacterVector
. Essayez de passer le paramètre f1
directement à Rcpp::as()
, par exemple:
std::ssortingng fname = Rcpp::as(f1);
Ou:
std::ssortingng fname = Rcpp::as(f1);
Le vrai problème est que Rcpp::as
nécessite que vous Rcpp::as
le type que vous voulez convertir manuellement, tel que Rcpp::as
.
L’entrée de toutes as
surcharges étant toujours un SEXP
, le compilateur ne sait pas lequel utiliser et ne peut pas prendre la décision automatiquement. c’est pourquoi vous devez l’aider. Les choses fonctionnent différemment pour wrap
qui peut utiliser le type d’entrée pour décider de la surcharge à utiliser.