<div dir="ltr"><div>Hi, Romain,</div><div> </div><div>Your suggestion works pretty well.  I appreciate your valuable help !</div><div> </div><div>Chaomei</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Thu, May 22, 2014 at 4:18 PM, Romain François <span dir="ltr"><<a href="mailto:romain@r-enthusiasts.com" target="_blank">romain@r-enthusiasts.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style><div>Hello, </div><div><br></div><div>From what I understand of ArrayRCP, having read the documentation for a few minutes. (<a href="http://trilinos.sandia.gov/packages/docs/r9.0/packages/teuchos/doc/html/classTeuchos_1_1ArrayRCP.html" target="_blank">http://trilinos.sandia.gov/packages/docs/r9.0/packages/teuchos/doc/html/classTeuchos_1_1ArrayRCP.html</a>)</div>
<div>This looks like a vector and therefore it is likely that the default Exporter<T> will not be useful as it tries to use the constructor taking a SEXP : </div><div><br></div><div><div><span style="white-space:pre-wrap">         </span>template <typename T></div>
<div><span style="white-space:pre-wrap">          </span>class Exporter{</div><div><span style="white-space:pre-wrap">          </span>public:</div><div><span style="white-space:pre-wrap">          </span>    Exporter( SEXP x ) : t(x){}</div><div>
<span style="white-space:pre-wrap">             </span>    inline T get(){ return t ; }</div><div><br></div><div><span style="white-space:pre-wrap">              </span>private:</div><div><span style="white-space:pre-wrap">         </span>    T t ;</div>
<div><span style="white-space:pre-wrap">          </span>} ;</div></div><div><br></div><div>you can use a RangeExporter instead which looks more compatible to what ArrayRCP looks like: </div><div><br></div><div><div><span style="white-space:pre-wrap">                </span>template <typename T> class RangeExporter {</div>
<div><span style="white-space:pre-wrap">          </span>public:</div><div><span style="white-space:pre-wrap">          </span>    typedef typename T::value_type r_export_type ;</div><div><br></div><div><span style="white-space:pre-wrap">            </span>    RangeExporter( SEXP x ) : object(x){}</div>
<div><span style="white-space:pre-wrap">          </span>    ~RangeExporter(){}</div><div><br></div><div><span style="white-space:pre-wrap">                </span>    T get(){</div><div><span style="white-space:pre-wrap">           </span>        T vec( ::Rf_length(object) );</div>
<div><span style="white-space:pre-wrap">          </span>        ::Rcpp::internal::export_range( object, vec.begin() ) ;</div><div><span style="white-space:pre-wrap">              </span>        return vec ;</div><div><span style="white-space:pre-wrap">         </span>    }</div>
<div><br></div><div><span style="white-space:pre-wrap">         </span>private:</div><div><span style="white-space:pre-wrap">         </span>    SEXP object ;</div><div><span style="white-space:pre-wrap">              </span>} ;</div></div><div><br>
</div><div><br></div><div>You can probably do this by having something like this early enough (after RcppCommon.h but before Rcpp.h). </div><div><br></div><div><div>namespace Rcpp {</div><div>namespace traits {</div><div>
<br></div><div>  template <typename T> class Exporter<  Teuchos::ArrayRCP<T> > : public RangeExporter< Teuchos::ArrayRCP<T> >{</div><div>  public:</div><div>    Exporter( SEXP x) : RangeExporter< Teuchos::ArrayRCP<T> >(x){}  </div>
<div>  }</div><div><br></div><div>}</div><div>}</div></div><div><br></div><div><br></div><div>Romain</div><br><div><div>Le 23 mai 2014 à 00:42, Chaomei Lo <<a href="mailto:chaomeilo@gmail.com" target="_blank">chaomeilo@gmail.com</a>> a écrit :</div>
<br><blockquote type="cite"><div><div class="h5"><div dir="ltr"><div>Sorry to confuse you, Dirk, I had my previous message title wrong.  Here below was the message with the correct title and content.</div><div> </div><div>
////////////////////////////////</div><div><div>I have created R packages using Makevars and it works pretty good for me. I am able to convert from a Rcpp::NumericVector to std::vector as in below. </div>
<div> </div><div><div><em>NumericVector col_cts = buildMatrix(Xr);<br><br>vector<long unsigned int> col_counts = Rcpp::as<vector<long unsigned int>>(col_cts);<br>  </em><br>Now I am having a problem with an application involves the Trilinos library. Here below I am trying to convert a Rcpp::NumericVector to Teuchos::ArrayRCP<size_t> in the following line, it gave me errors as shown below in red.  Would you please help me with this ?</div>

<div> </div><div><em>Teuchos::ArrayRCP<size_t> col_counts=Rcpp::as<Teuchos::ArrayRCP<size_t>>(col_cts);</em></div><div> </div><div>Thanks a lot.</div><div> </div></div><div><font style="background-color:rgb(255,255,255)"><font color="#ff0000"><font>In file included from /share/apps/R/3.0.2/lib64/R/library/Rcpp/include/Rcpp/as.h:25:0,<br>

  </font>                </font></font><font color="#ff0000" style="background-color:rgb(255,255,255)">from /share/apps/R/3.0.2/lib64/R/library/Rcpp/include/RcppCommon.h:169,<br>                 from /share/apps/R/3.0.2/lib64/R/library/Rcpp/include/Rcpp.h:27,<br>

                  from buildMatrix.cpp:4:<br>/share/apps/R/3.0.2/lib64/R/library/Rcpp/include/Rcpp/internal/Exporter.h: In constructor 'Rcpp::traits::Exporter<T>::Exporter(SEXP) [with T = Teuchos::Array<br>RCP<long unsigned int>, SEXP = SEXPREC*]':<br>

 /share/apps/R/3.0.2/lib64/R/library/Rcpp/<font>include</font>/Rcpp/as.h:79:51:   instantiated from 'T Rcpp::internal::as(SEXP, Rcpp::traits::r_type_generic_tag) [with T =<br> Teuchos::ArrayRCP<long unsigned int>, SEXP = SEXPREC*]'<br>

 /share/apps/R/3.0.2/lib64/R/library/Rcpp/include/Rcpp/as.h:144:84:   instantiated from 'T Rcpp::as(SEXP) [with T = Teuchos::ArrayRCP<long unsigned int>, SEXP<br> = SEXPREC*]'<br>buildMatrix.cpp:84:87:   <font>instantiated</font> from here<br>

 /share/apps/R/3.0.2/lib64/R/library/Rcpp/include/Rcpp/internal/Exporter.h:31:31: error: invalid conversion from 'SEXP' to 'long int' [-fpermissive]<br>/people/d3j508/trilinos-11.6.1/trilinos-11.6.1_Install/include/Teuchos_ArrayRCP.hpp:129:1: error:   initializing argument 1 of 'Teuchos::ArrayRCP<T>::ArrayRC<br>

 P(Teuchos::ArrayRCP<T>::size_type, const T&) [with T = long unsigned int, Teuchos::ArrayRCP<T>::size_type = long int]' [-fpermissive]<br>make: *** [buildMatrix.o] Error 1<br>ERROR: compilation failed for package 'Tpkg'</font></div>

<div></div></div></div></div></div>
_______________________________________________<br>Rcpp-devel mailing list<br><a href="mailto:Rcpp-devel@lists.r-forge.r-project.org" target="_blank">Rcpp-devel@lists.r-forge.r-project.org</a><br><a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a></blockquote>
</div><br></div></blockquote></div><br></div>