I am not able to #include "R_ext/Altrep.h" from a C++ file. I think
it needs two changes:
1. add the same __cplusplus check as most of the other header files:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
2. change the line
R_new_altrep(R_altrep_class_t class, SEXP data1, SEXP data2);
to
R_new_altrep(R_altrep_class_t cls, SEXP data1, SEXP data2);
since C++ doesn't like an argument named 'class'
~~ Michael Sannella
R_ext/Altrep.h should be more C++-friendly
5 messages · Michael Sannella, Luke Tierney, Gabriel Becker +1 more
Thanks for the suggestion. Committed in R_devel. Best, luke
On Mon, 8 Oct 2018, Michael Sannella wrote:
I am not able to #include "R_ext/Altrep.h" from a C++ file.? I think
it needs two changes:
1. add the same __cplusplus check as most of the other header files:
? ? #ifdef? __cplusplus
? ? extern "C" {
? ? #endif
? ? ? ? ...
? ? #ifdef? __cplusplus
? ? }
? ? #endif
2. change the line
? ? R_new_altrep(R_altrep_class_t class, SEXP data1, SEXP data2);
?to
? ? R_new_altrep(R_altrep_class_t cls, SEXP data1, SEXP data2);
?since C++ doesn't like an argument named 'class'
? ~~ Michael Sannella
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa Phone: 319-335-3386
Department of Statistics and Fax: 319-335-3017
Actuarial Science
241 Schaeffer Hall email: luke-tierney at uiowa.edu
Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
Michael,
Thanks for reaching out. This was brought up by Romaine Francois offline to
me as well. What he does as a workaround is
#define class klass
extern "C" {
#include <R_ext/Altrep.h>
}
#undef class
While we consider changing Altrep.h, the above should work for you in the
immediate term.
Let me know if it doesn't.
~G
On Mon, Oct 8, 2018 at 4:17 PM, Michael Sannella via R-devel <
r-devel at r-project.org> wrote:
I am not able to #include "R_ext/Altrep.h" from a C++ file. I think
it needs two changes:
1. add the same __cplusplus check as most of the other header files:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
2. change the line
R_new_altrep(R_altrep_class_t class, SEXP data1, SEXP data2);
to
R_new_altrep(R_altrep_class_t cls, SEXP data1, SEXP data2);
since C++ doesn't like an argument named 'class'
~~ Michael Sannella
[[alternative HTML version deleted]]
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Gabriel Becker, Ph.D Scientist Bioinformatics and Computational Biology Genentech Research [[alternative HTML version deleted]]
I successfully use this workaround in this package: https://github.com/romainfrancois/altrepisode (which is just my way to get familiar with altrep, nothing serious)
Le 9 oct. 2018 ? 17:00, Gabe Becker <becker.gabe at gene.com> a ?crit :
Michael,
Thanks for reaching out. This was brought up by Romaine Francois offline to me as well. What he does as a workaround is
#define class klass
extern "C" {
#include <R_ext/Altrep.h>
}
#undef class
While we consider changing Altrep.h, the above should work for you in the immediate term.
Let me know if it doesn't.
~G
On Mon, Oct 8, 2018 at 4:17 PM, Michael Sannella via R-devel <r-devel at r-project.org> wrote:
I am not able to #include "R_ext/Altrep.h" from a C++ file. I think
it needs two changes:
1. add the same __cplusplus check as most of the other header files:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
2. change the line
R_new_altrep(R_altrep_class_t class, SEXP data1, SEXP data2);
to
R_new_altrep(R_altrep_class_t cls, SEXP data1, SEXP data2);
since C++ doesn't like an argument named 'class'
~~ Michael Sannella
[[alternative HTML version deleted]]
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
-- Gabriel Becker, Ph.D Scientist Bioinformatics and Computational Biology Genentech Research
Thank you, I updated my example package so that it works with both. https://github.com/romainfrancois/altrepisode/blob/96af0548a9ecc08701d119ea427e16940a82882b/src/altrepisode.h <https://github.com/romainfrancois/altrepisode/blob/96af0548a9ecc08701d119ea427e16940a82882b/src/altrepisode.h> We have to do something like this unless we depend on R 3.6.0: #if R_VERSION < R_Version(3, 6, 0) #define class klass extern "C" { #include <R_ext/Altrep.h> } #undef class #else #include <R_ext/Altrep.h> #endif Romain
Le 9 oct. 2018 ? 05:09, Tierney, Luke <luke-tierney at uiowa.edu> a ?crit : Thanks for the suggestion. Committed in R_devel. Best, luke On Mon, 8 Oct 2018, Michael Sannella wrote:
I am not able to #include "R_ext/Altrep.h" from a C++ file. I think
it needs two changes:
1. add the same __cplusplus check as most of the other header files:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
2. change the line
R_new_altrep(R_altrep_class_t class, SEXP data1, SEXP data2);
to
R_new_altrep(R_altrep_class_t cls, SEXP data1, SEXP data2);
since C++ doesn't like an argument named 'class'
~~ Michael Sannella
-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel