convertir Rcpp :: CharacterVector en std :: ssortingng

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.