<font face="arial, helvetica, sans-serif">Would something like this work? (Romain you probably know best whether this will actually work out over a large range of scenarios as well as if the std::string specialization would work)</font><div>
<font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif"><div><br></div><div>#include <Rcpp.h></div><div>using namespace Rcpp;</div><div><br></div><div>template<int RTYPE></div>
<div>RObject unique_generic(RObject x) {</div><div>    Vector<RTYPE> vector = as<Vector<RTYPE> >(x);</div><div>    std::tr1::unordered_set<typename Vector<RTYPE>::stored_type ></div><div>                                        set(vector.begin(), vector.end());</div>
<div>    return wrap(set);</div><div>}</div><div><br></div><div>template<> RObject unique_generic<CHARSXP>(RObject x) {</div><div>  // TODO: appropriate specialization for CHARSXP (std::string)</div><div>  return x;</div>
<div>}</div><div><br></div><div>#define DISPATCH_METHOD(method, x) \</div><div>   switch(x.sexp_type()) { \</div><div>    case REALSXP: \</div><div>      return method<REALSXP>(x); \</div><div>    case INTSXP: \</div>
<div>      return method<INTSXP>(x); \</div><div>    case CHARSXP: \</div><div>      return method<CHARSXP>(x); \</div><div>    case LGLSXP: \</div><div>      return method<LGLSXP>(x); \</div><div>    default: \</div>
<div>      Rf_error("Unsupported type"); \</div><div>      return x; \</div><div>  }</div><div><br></div><div><br></div><div>// [[Rcpp::export]]</div><div>RObject unique2(RObject x) {</div><div>  DISPATCH_METHOD(unique_generic, x)</div>
<div>}</div><div><br></div><div>/*** R</div><div><br></div><div>unique2(c(1.0,2.4,3.3,3.3,3.3,3.3,2,2,6))</div><div><br></div><div>unique2(c(1,5,5,6,7))</div><div><br></div><div>*/</div><div><br></div></font></div>