[C++-sig] automatic conversion from python unicode object to C++ std::string?

Jim Bosch talljimbo at gmail.com
Fri Aug 12 21:15:01 CEST 2011


On 08/12/2011 04:36 AM, John Reid wrote:
> I recently upgraded to ipython 0.11. In 0.11 sys.argv entries are of
> type unicode rather than string. All of my scripts that call into
> boost.python extensions fail as my exposed functions expect arguments of
> type std::string. Presumably I could recode all my functions to use
> std::wstring and everything would work. This would be a lot of work so
> for the moment, I'm encoding everything in python from unicode to
> strings. I was wondering if there is a simple way to tell my
> boost.python extensions to do this encoding automatically.
>

Hmm. You might be able to write a custom rvalue_from_python conversion 
from the Python unicode type to std::string.  You could only do that 
once, and it would work everywhere, but it would mean unicode objects 
would be convertible to std::string everywhere, and I'm not sure that's 
desirable.

I don't think the from-python conversions are terribly well-documented, 
but you can learn a lot from 
boost/python/converter/rvalue_from_python_data.hpp.  If you need help, 
just ask.

Good luck!

Jim Bosch


More information about the Cplusplus-sig mailing list