[Rcpp-devel] Extending Rcpp with a dummy class

Alessandro Mammana mammana at molgen.mpg.de
Thu Feb 13 15:55:36 CET 2014


Dear all,
I have another one of my stupid questions.
Suppose that for any reason I want to define my own vector class like this:

@@@@@@@@@@@@@@@@@
template<typename T>
struct Vec {
    T* ptr;
    int len;
};
@@@@@@@@@@@@@@@@@

so, without owning memory but just pointing to some (hopefully valid)
area of memory.
How can I extend Rcpp with this class so that I can have R vectors
automatically converted to these vectors?
The obvious answer is "read "extending Rcpp" instead of bothering us",
and I did it, and I tried the following:

@@@@@@@@@@@@@@@@@
#include <RcppCommon.h>

template<typename T>
struct Vec {
    T* ptr;
    int len;

    Vec(SEXP x){
        if (TYPEOF(x) != Rcpp::traits::r_sexptype_traits<T>::rtype)
            Rcpp::stop("incompatible types");

        Rcpp::Vector< Rcpp::traits::r_sexptype_traits<T>::rtype > rcpp_vec(x);
        ptr = rcpp_vec.begin();
        len = rcpp_vec.length();
    }
};

#include <Rcpp.h>

blablabla
@@@@@@@@@@@@@@@@@


but the compiler complains and says:
error: 'Vector' is not a member of 'Rcpp'

this is probably because I still did not import Rcpp.h, but in
"extending Rcpp" they say to include Rcpp.h only after defining my
classes, so how should I do?

Thanks in advance!
Ale

-- 
Alessandro Mammana, PhD Student
Max Planck Institute for Molecular Genetics
Ihnestraße 63-73
D-14195 Berlin, Germany


More information about the Rcpp-devel mailing list