<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-AU" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<p class="MsoNormal">Excellent!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks Romain. I’ll get the new version and let you know how I go with both the toy and the real code.<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Thanks Romain (and also Dirk for help),<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The following R + Rcpp works with the latest package build from R.Forge (the complete code is lower down). My real code (far more complex) has also compiled, pending correction of various other mistakes it should
 work.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Cheers,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Luke.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> require(Rcpp)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Loading required package: Rcpp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> sourceCpp("test.cpp")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> # Reference Class of B<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> B_R <- setRefClass( "B_R",<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">+     fields = list(id="numeric")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">+ )<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> b1<-B_R$new(id=1)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> b2<-B_R$new(id=2)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> a<-A$new(vec_of_T=list(b1,b2))<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> a$show()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">vec_of_T:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Length: 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Type T: 1B<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">id: 1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">id: 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> a2<-A$new(vec_to_T=list())<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">> a2$show()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">vec_of_T:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Length: 20<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Type T: 1B<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">id: 0<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">id: 1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">id: 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">id: 3<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">id: 4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">...etc..<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">test.cpp:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">#include <RcppCommon.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">class B {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    public:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        int id;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        B (SEXP b);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        B (int id=-1);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        void show();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">};<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">/*** R<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"># Reference Class of B<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">B_R <- setRefClass( "B_R",<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    fields = list(id="numeric")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">*/<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">template <class T> class A {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    public:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        std::vector<T> vec_of_T;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        A( std::vector<T> in_vec );<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        void show();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">};<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">#include <Rcpp.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">B::B(SEXP b){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Rcpp::Reference in_b(b);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    id=in_b.field("id");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">B::B(int id){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    this->id=id;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">void B::show(){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Rcpp::Rcout << "id: " << id << "\n";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">template <class T> A<T>::A (std::vector<T> in_vec){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    if (in_vec.empty()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        this->vec_of_T.reserve(20);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        for (int i=0; i<20; i++){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">            this->vec_of_T.push_back(T(i));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    } else {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        this->vec_of_T=in_vec;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">template <class T> void A<T>::show(){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Rcpp::Rcout << "vec_of_T:\n";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    Rcpp::Rcout << "    Length: " << vec_of_T.size() << "\n";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    if(!vec_of_T.empty()){<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        Rcpp::Rcout << "    Type T: " << typeid(vec_of_T[0]).name() << "\n";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">        for( unsigned int i=0; i<vec_of_T.size(); i++) vec_of_T[i].show();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">using namespace Rcpp;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">RCPP_MODULE(testing) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    class_< A<B> >("A")<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    .constructor< std::vector<B> >()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    .method("show", &A<B>::show)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">    ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
</div>
</body>
</html>