[C++-sig] Auto-converting to a custom string type?

Aaron Bentley abentley at panoramicfeedback.com
Mon Jul 18 17:45:53 CEST 2005


Our library uses a custom unicode string type called 'StringBuffer'.
I'd like to be able to auto-convert python unicode objects into
StringBuffers, because the alternative (AFAICT) it to wrap every
function that takes a StringBuffer parameter.

I thought I might be able to declare Python objects as implicitly
convertible to StringBuffer, but it doesn't quite work

---
StringBuffer make_StringBuffer(PyObject * uni_str)
{
   const char *utf8str = call_method<const char *>(uni_str, "encode",
"UTF-8");
   const char *end = utf8str + strlen(utf8str);
   StringBuffer sb;
   stringfunction::fromUTF8(sb.back_inserter(), utf8str, end);
   return sb;
}

then

def("make_StringBuffer", make_StringBuffer);

implicitly_convertible<PyObject *, StringBuffer>();
---

But what I get is

---
/home/abentley/develc/boost/boost/python/implicit.hpp:22:   instantiated
from `void boost::python::implicitly_convertible(boost::type<Target>*,
boost::type<U>*) [with Source = PyObject*, Target = StringBuffer]'
/home/abentley/develc/engine/python/pfengine.cpp:562:   instantiated
from here
/home/abentley/develc/boost/boost/python/converter/implicit.hpp:34: no
matching function for call to `StringBuffer::StringBuffer(PyObject*)'
---

It appears to insist that I provide a constructor
StringBuffer::StringBuffer(PyObject*), but I would rather do this
wrapping without altering the StringBuffer class.

Is there a better way?

Aaron
-- 
Aaron Bentley
Director of Technology
Panometrics, Inc.




More information about the Cplusplus-sig mailing list