[C++-sig] [Boost.python] Converting python file object to std::istream.

Stefan Seefeld seefeld at sympatico.ca
Mon Nov 6 03:17:24 CET 2006


Dan wrote:
> I am exposing a C++ class to python that takes a reference to a 
> std::istream object and operates on it. It looks something like this:
> 
> class StreamReader
> {
> public:
>      StreamReader(std::istream& strm);
> 
> private:
>      std::istream& strm_;
> }
> 
> I would like to expose this class to python allowing a python client to 
> pass in any python file type object (regular file object, StringIO 
> object, stdin, etc.), as a C++ client would be able to pass any 
> std::istream derived object.
> 
> Now it seems to me that someone must have encountered this problem 
> before, but I haven't seen any references as to how to make this work.
> 
> Any ideas on the best way to proceed would be appreciated.

It seems to me the correct way to do this is to implement the streambuf
interface in terms of a boost::python::object, i.e. in which the xsputn()
method is implemented as calling the python object's 'write' method.

I haven't seen any such implementation yet.

Regards,
		Stefan

-- 

      ...ich hab' noch einen Koffer in Berlin...



More information about the Cplusplus-sig mailing list