[Rcpp-devel] Passing template class as argument in Rcpp function
Iñaki Ucar
iucar at fedoraproject.org
Thu Mar 4 17:56:15 CET 2021
On Thu, 4 Mar 2021 at 17:39, Subhomoy Ghosh <subhomoy25 at gmail.com> wrote:
>
> Hi,
>
> This is related to my post. My question is in the same spirit except for one additional complexity. How can one create a new instance of a template class object with a pointer on it and create an external pointer that can be further passed as an argument of a function? Here is a small example of my goal that will obviously not run and show "Use of class template Uniform2 requires template arguments".
You can create a non-template parent class (e.g., Distribution) from
which your template class derives. Then you just return a pointer to
the parent. In [1] you'll see an example of this (Activity is the
parent class; Seize, Release and the others are template classes that
inherit from Activity). In your example, you can use something like
Rcpp::XPtr<Distribution> ptr(new Uniform2<double>(as<double>(max), D ), true);
[1] https://github.com/r-simmer/simmer/blob/master/src/activity.cpp
Iñaki
> // template class
> template <typename T>
> class Uniform2 {
>
> public:
> Uniform2(T max_,mat D_) :
> max(max_), D(D_) {}
>
> ~Uniform2(){};
>
> T max;
> mat D;
> };
>
>
> /// get function
> // [[Rcpp::export]]
> XPtr<Uniform2> getUniform(const mat &D, SEXP max,char type) {
> // create pointer to a template Uniform object and
> // wrap it as an external pointer
> if(type=='double') {
> Rcpp::XPtr<Uniform2> ptr(new Uniform2<double>(as<double>(max), D ), true);
> return ptr;
> } else if(type=='int') {
> Rcpp::XPtr<Uniform2> ptr(new Uniform2<int>(as<int>(max), D ), true);
> return ptr;
> }
> // return the external pointer to the R side
> return Rcpp::XPtr<Uniform2>(R_NilValue);
> }
>
>
>
> //do something
> // [[Rcpp::export]]
> double test2(double z, XPtr<Uniform2> xp) {
>
> double CC= z * xp->max;
>
> return CC;
>
> }
>
> Thanks,
> Subhomoy
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
Iñaki Úcar
More information about the Rcpp-devel
mailing list