<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;}
/* 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;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@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">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"><o:p> </o:p></p>
<p class="MsoNormal">> Symbol not found: __ZN1AI1BEC1ESt6vectorIS0_SaIS0_EE<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> which is:<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> $ c++filt __ZN1AI1BEC1ESt6vectorIS0_SaIS0_EE<o:p></o:p></p>
<p class="MsoNormal">> A<B>::A(std::vector<B, std::allocator<B> >)<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> which I can quickly correct by implementing the constructor:<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> A( std::vector<T> in_vec ) : vec_of_T(in_vec){}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Yes, I took the implementation of the A constructor out of the toy example as it did not influence the original error.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> Date: Thu, 22 Aug 2013 08:21:52 +0200<o:p></o:p></p>
<p class="MsoNormal">> From: Romain Francois <romain@r-enthusiasts.com><o:p></o:p></p>
<p class="MsoNormal">> To: rcpp-devel@lists.r-forge.r-project.org<o:p></o:p></p>
<p class="MsoNormal">> Subject: Re: [Rcpp-devel] Problem exposing constructor taking<o:p></o:p></p>
<p class="MsoNormal">>             std::vector of user defined class to R using Rcpp-attributes and<o:p></o:p></p>
<p class="MsoNormal">>             Rcpp-modules<o:p></o:p></p>
<p class="MsoNormal">> Message-ID: <5215AE00.8000003@r-enthusiasts.com><o:p></o:p></p>
<p class="MsoNormal">> Content-Type: text/plain; charset=windows-1252; format=flowed<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> Hello,<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> The compiler tells you that :<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include/Rcpp/internal/export.h:90:
<o:p></o:p></p>
<p class="MsoNormal">> error: no matching function for call to <o:p></o:p></p>
<p class="MsoNormal">> ?export_range__dispatch(SEXPREC*&, __gnu_cxx::__normal_iterator<B*,
<o:p></o:p></p>
<p class="MsoNormal">> std::vector<B, std::allocator<B> > >&, Rcpp::traits::r_type_generic_tag)?<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> The important thing to see here is "r_type_generic_tag"<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> We currently only have versions of export_range__dispatch for these:<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> -- strings:<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> template <typename InputIterator, typename value_type><o:p></o:p></p>
<p class="MsoNormal">> void export_range__dispatch( SEXP x, InputIterator first, <o:p>
</o:p></p>
<p class="MsoNormal">> ::Rcpp::traits::r_type_string_tag )<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> -- primitive types (double, int, ...):<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> template <typename InputIterator, typename value_type><o:p></o:p></p>
<p class="MsoNormal">> void export_range__dispatch( SEXP x, InputIterator first, <o:p>
</o:p></p>
<p class="MsoNormal">> ::Rcpp::traits::r_type_primitive_tag )<o:p></o:p></p>
<p class="MsoNormal">>                             <o:p></o:p></p>
<p class="MsoNormal">> So we need one for the r_type_generic_tag :<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> template <typename InputIterator, typename value_type><o:p></o:p></p>
<p class="MsoNormal">> void export_range__dispatch( SEXP x, InputIterator first, <o:p>
</o:p></p>
<p class="MsoNormal">> ::Rcpp::traits::r_type_generic_tag )<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> I just added it in svn. So now your code almost compiles. I did get a<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> Symbol not found: __ZN1AI1BEC1ESt6vectorIS0_SaIS0_EE<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> which is:<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> $ c++filt __ZN1AI1BEC1ESt6vectorIS0_SaIS0_EE<o:p></o:p></p>
<p class="MsoNormal">> A<B>::A(std::vector<B, std::allocator<B> >)<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> which I can quickly correct by implementing the constructor:<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> A( std::vector<T> in_vec ) : vec_of_T(in_vec){}<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> Then I can do this:<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> # Reference Class of B<o:p></o:p></p>
<p class="MsoNormal">> B_R <- setRefClass( "B_R",<o:p></o:p></p>
<p class="MsoNormal">>      fields = list(id="numeric")<o:p></o:p></p>
<p class="MsoNormal">> )<o:p></o:p></p>
<p class="MsoNormal">> b1 <- new( "B_R", id = 1 )<o:p></o:p></p>
<p class="MsoNormal">> b2 <- new( "B_R", id = 1 )<o:p></o:p></p>
<p class="MsoNormal">> a <- new( A, list(b1,b2) )<o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> <o:p></o:p></p>
<p class="MsoNormal">> Romain<o:p></o:p></p>
</div>
</body>
</html>