[C++-sig] Re: [Fwd: Re: Iterators + shared_ptr + Abstract base classes + Pass by reference = help :)]
David Sankel
camio at yahoo.com
Mon Jan 6 17:39:14 CET 2003
--- "David Abrahams" wrote:> > I would like the Python derived class to see a> list of> > Abstracts. > > And what do you expect it to be able to do to the> list? I'm not> asking about the items it contains, yet. Do you> need to be able to> modify the length of the list, or move items within> it, etc?I would like to have the ability to do everything that you can do with a normal Python list. Such as modify the length, move items within it, etc.> I don't see what iterators have to do with it.That was my misunderstanding.> Have you looked at> http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/data_members.html> ?> > In order to use this, you'll need to expose the type> of the> Filter::data member. Unless...> > ...I suppose you want Filter::data to show up as a> Python list also?Yes, if possible.> It sounds like you may want to explore> http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/*checkout*/boost/boost/libs/python/doc/v2/faq.html#question2Explored. Thanks a lot for your help with this thus far. I really appreciate it. Here is where I am now (I'm using the container conversions pointed to by the faq):class Abstract{public: virtual shared_ptr clone()=0; virtual ~Abstract(){}};class Filter{public: vector > data; virtual void doFilter( vector > &result)=0; virtual std::string name() const=0; virtual ~Filter(){}};class PythonFilter : public Filter{public: PythonFilter( PyObject * self ) : m_self( self ), m_initialized(true) { }; void doFilter( vector > &result) { if( m_initialized ) { cout > > ( m_self, "doFilter", ref( result ) ); } } virtual std::string name() const { return call_method ( m_self, "name" ); } virtual ~PythonFilter(){}private: PyObject * m_self; bool m_initialized;};BOOST_PYTHON_MODULE(embedded_Filter){ class_, boost::noncopyable > ("Abstract", no_init ); class_ ("Filter"); to_python_converter >, scitbx::boost_python::container_conversions::to_tuple > > > (); scitbx::boost_python::container_conversions::from_python_sequence >, scitbx::boost_python::container_conversions::variable_capacity_policy>();}But I am still missing something because I cannot get the following python code without the comments to work:from embedded_Filter import *class SpecificFilter( Filter ): def name( self ): return 'SpecificFilterA' def doFilter( self, result ): print("In SpecificFilter.doFilter\n") print( len( self.data ) ) ; #self.data is a normal python list print( len( result ) ); #So is result p = [x.clone() for x in self.data] #The members of self.data can #have their methods called result = p #result can be modified as a python list result.reverse() #another modification to result.Thanks again for the help,David J. SankelHead ConsultantElectron Consulting
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20030106/a3111347/attachment.htm>
More information about the Cplusplus-sig
mailing list