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]]
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[[alternative HTML version deleted]]
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
[[alternative HTML version deleted]]