[C++-sig] wchar_t* type conversion
Renato Araujo
renatox at gmail.com
Mon Jun 22 15:48:54 CEST 2009
Hi Nicolas,
Can you send a simple example, where the convention fail (c++ to
python or python to c++)? What kind of test you are running?
BR
Renato
On Mon, Jun 22, 2009 at 8:31 AM, Nicolas Lara<nicolaslara at gmail.com> wrote:
> Hello,
> I'm new to Boost::Python and am encountering a problem that seem to be
> quite common: I need to expose a class to C++ whose constructor takes
> a wchar_t* as a parameter.
> The problem is that there is no default type converter from wchar_t to
> python and vice-versa.
>
> I wanted to know if there was a standard way of doing this. Or if
> anyone could point me to an implementation of this type conversion.
>
> So far I'm doing this (based on the faq):
>
> struct wchar_t_to_python_str
> {
> static PyObject* convert(wchar_t* const& w)
> {
> string s = "";
> wchar_t* w2 = w;
> while(*w2++ != 0){
> s += *w2;
> }
> return boost::python::incref(boost::python::object(s).ptr());
> }
> };
>
> struct wchar_t_from_python_str
> {
> wchar_t_from_python_str()
> {
> boost::python::converter::registry::push_back(
> &convertible,
> &construct,
> boost::python::type_id<wchar_t>());
> }
>
> static void* convertible(PyObject* obj_ptr)
> {
> if (!PyString_Check(obj_ptr)) return 0;
> return obj_ptr;
> }
>
> static void construct(
> PyObject* obj_ptr,
>
> boost::python::converter::rvalue_from_python_stage1_data* data)
> {
> const char* value = PyString_AsString(obj_ptr);
> Py_ssize_t l = PyString_Size(obj_ptr);
> if (value == 0) boost::python::throw_error_already_set();
> void* storage = (
>
> (boost::python::converter::rvalue_from_python_storage<wchar_t*>*)
> data)->storage.bytes;
>
> wchar_t* w = new wchar_t[l];
> for(int i=0;i<l;i++){
> w[i] = value[i];
> }
> data->convertible = w;
> }
> };
> void init_module()
> {
> to_python_converter<wchar_t*,wchar_t_to_python_str>();
> wchar_t_from_python_str();
> }
>
> BOOST_PYTHON_MODULE(queryparser){
> init_module();
> }
>
> But it doesn't seem to be working. It compiles, but python doesn't
> understand the conversion.
> Any thoughts?
>
>
> Thanks in advance!
>
> --
> Nicolas Lara
> Linux user #380134
> http://nicolas-lara.blogspot.com/
> Public key id: 0x152e7713 at http://subkeys.pgp.net/
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>
--
Renato Araujo Oliveira Filho
More information about the Cplusplus-sig
mailing list