[C++-sig] TypeError: No to_python (by-value) converter found for C++ type: class std::basic_ostream<char, struct std::char_traits<char> >

Simon W simwarg at gmail.com
Tue Sep 28 21:02:04 CEST 2010


Hi,
Im trying to expose limited parts of std::ostream like this:
        {
            class_<std::ios_base, boost::noncopyable>("iosbase", init<const
std::ios_base&>())
                ;

            class_<std::ios, bases<std::ios_base>,
boost::noncopyable>("ios", init<std::streambuf*>())
                ;

            std::ostream&(std::ostream::*write)(const char*,
std::streamsize) = &std::ostream::write;

            return class_<std::ostream, bases<std::ios>,
boost::noncopyable>("ostream", no_init)
                .def("write", write ,
return_value_policy<copy_non_const_reference>())
                ;

        }


When I call a python function from a C++ wrapper class:

            virtual Uint32    serialise(const GameObject* obj, std::ostream&
file)
            {
                try
                {
                if(boost::python::override f = get_override("serialise"))
                    return f(boost::python::object(boost::python::ptr(obj)),
boost::python::object(boost::python::ptr(&file)));
                else
                    return ComponentSystem::serialise(obj, file);
                }
                catch(...)
                {
                    PyErr_Print();
                }
            }

I get this error:
*TypeError: No to_python (by-value) converter found for C++ type: class
std::basic_ostream<char,struct std::char_traits<char> >*

This is the python function
*    def serialise(self, gameobj, file):
        if(gameobj in self.components):
            file.write("HEY", 3)*

What's the problem here? Is is because the ostream argument is an reference?
Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20100928/e19b817b/attachment.html>


More information about the Cplusplus-sig mailing list