I tracked this down to const-ness:

bar <- cxxfunction(signature(xs_="character"), plugin='Rcpp', body='
const CharacterVector xs(xs_);
const std::string x(xs(0));
Rcout << x << std::endl;')

fails with the compile error mentioned in my last message, while

foo <- cxxfunction(signature(xs_="character"), plugin='Rcpp', body='
CharacterVector xs(xs_);
std::string x(xs(0));
Rcout << x << std::endl;')

foo(month.abb)

works fine. I'll be happy to add a unit test to the package if the devs want it.

And to go back to my initial qustion: I'm still not sure why "as<std::string>" 
doesn't work:

baz <- cxxfunction(signature(xs_="character"), plugin='Rcpp', body='
CharacterVector xs(xs_);
std::string x = as<std::string>(xs(0));
Rcout << x << std::endl;')

baz(month.abb)

will throw "expecting a string".

Davor


On 2013-02-07, at 10:27 AM, Davor Cubranic wrote:

> On 2013-02-07, at 10:15 AM, Kevin Ushey wrote:
> 
>> One trick to get around this is to 'as' the entire CharacterVector into a 
>> std::vector< std::string >, and then index based off of that.
>> 
>> My guess is though, elements of CharacterVectors are 'const char*' s, so to 
>> convert them to strings you might want to just use std::string constructor, 
>> eg. std::string( xs(0) ).
> 
> That used to work with 0.10.0, but when I upgraded this morning to 0.10.2, 
> gives me the following compile error:
> 
> rcppdb.cpp:131: error: no matching function for call to 
> 'std::basic_string<char, std::char_traits<char>, std::allocator<char> 
> >::basic_string(SEXPREC* const&)'
> /usr/include/c++/4.2.1/bits/basic_string.tcc:233: note: candidates are: 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string(typename 
> _Alloc::rebind<_CharT>::other::size_type, _CharT, const _Alloc&) [with _CharT 
> = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
> /usr/include/c++/4.2.1/bits/basic_string.tcc:226: note:                 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const 
> _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = 
> std::allocator<char>]
> /usr/include/c++/4.2.1/bits/basic_string.tcc:219: note:                 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, 
> typename _Alloc::rebind<_CharT>::other::size_type, const _Alloc&) [with 
> _CharT = char, _Traits = std::char_traits<char>, _Alloc = 
> std::allocator<char>]
> /usr/include/c++/4.2.1/bits/basic_string.tcc:208: note:                 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const 
> std::basic_string<_CharT, _Traits, _Alloc>&, typename 
> _Alloc::rebind<_CharT>::other::size_type, typename 
> _Alloc::rebind<_CharT>::other::size_type, const _Alloc&) [with _CharT = char, 
> _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
> /usr/include/c++/4.2.1/bits/basic_string.tcc:197: note:                 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const 
> std::basic_string<_CharT, _Traits, _Alloc>&, typename 
> _Alloc::rebind<_CharT>::other::size_type, typename 
> _Alloc::rebind<_CharT>::other::size_type) [with _CharT = char, _Traits = 
> std::char_traits<char>, _Alloc = std::allocator<char>]
> /usr/include/c++/4.2.1/bits/basic_string.tcc:183: note:                 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const 
> std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = 
> std::char_traits<char>, _Alloc = std::allocator<char>]
> /usr/include/c++/4.2.1/bits/basic_string.tcc:191: note:                 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with 
> _CharT = char, _Traits = std::char_traits<char>, _Alloc = 
> std::allocator<char>]
> /usr/include/c++/4.2.1/bits/basic_string.h:2065: note:                 
> std::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = 
> char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
> make: *** [rcppdb.o] Error 1
> 
> Perhaps this is caused by the same bug, introduced somewhere post-0.10.0.
> 
> Davor
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel@lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to