[C++-sig] Problems using wrapper.hpp to override virtual functions

Roman Yakovenko roman.yakovenko at gmail.com
Thu Jan 17 19:53:06 CET 2008


can you create small and complete example?
I willtake a look on it.

On 1/17/08, Tim Spens <t_spens at yahoo.com> wrote:
> I've added in the __init__ constructor like you suggested but I'm still
> getting the same error?
> I also tried adding in a default forwarding function like in
> http://www.boost.org/libs/python/doc/tutorial/doc/html/python/exposing.html
> I'm using py++ to generate most of my wrapper code, with slight
> modifications.
>
> void default_handle(client_response const & rsp)
> {
>     this->python_client_handler::handle(boost::ref(rsp));
> }
>
> ..def("handle", &client_handler::handle,
> &python_client_handler_wrapper::default_handle)
>
>  Traceback (most recent call last):
>    File "./test_client.py", line 304, in <module>
>      class callback(handler):
>  Boost.Python.ArgumentError: Error when calling the metaclass bases
>      Python argument types in
>      python_client_handler.__init__(python_client_handler, str, tuple,
>  dict)
>  did not match C++ signature:
>      __init__(_object*)
>
> Tim
>
> ----- Original Message ----
> From: Roman Yakovenko <roman.yakovenko at gmail.com>
> To: Development of Python/C++ integration <c++-sig at python.org>
> Sent: Thursday, January 17, 2008 2:44:26 AM
> Subject: Re: [C++-sig] Problems using wrapper.hpp to override virtual
> functions
>
>
> On Jan 17, 2008 1:18 AM, Tim Spens <t_spens at yahoo.com> wrote:
> > Here is the simplest example of what I'm trying to do, I hope this is
>  enough the complete
> > project to quite large.  I'm using wrapper.hpp so that I can use a
>  python handler to handle
> > callbacks from the c++ code.
> >
> >
> >       //c++ pure virtual function definition
> >       virtual void handle(const CLIENT::client_response & rsp) = 0;
> >
> >       //c++ wrapper for virtual function "handle"
> >       virtual void handle(client_response const & rsp)
> >       {
> >           if(override func_handle = this->get_override("handle")){
> >                  //I cannot get this section of code to run, from
>  what I understand this would be the callback into python?
> >               func_handle(boost::ref(rsp));
> >               cout << "here handle in python" << endl;}
> >           else{
> >                  //I currently have a c++ handler which is called
>  here, I would like to use the python handler though.
> >               this->python_handler::handle(boost::ref(rsp));
> >               cout << "here handle in c++" << endl;}
> >       }
> >
> >       BOOST_PYTHON_MODULE(libclientpy)
> >       {
> >           class_<python_client_handler_wrapper,
>  bases<client_handler>, boost::noncopyable >("python_client_handler",
> init<>())
> >               .def("handle", &client_handler::handle);
> >       }
> >
> > #PYTHON CODE
> > import libclientpy
> > handler = libclientpy.python_handler()
> > client = libclientpy.client(handler, '127.0.0.1', 7900)
> >
> > class callback(handler):
> >     def handle(self):
> >         print 'handle python'
> >
> > azc = addZapCallback()
> >
> > Traceback (most recent call last):
> >   File "./test_client.py", line 304, in <module>
> >     class callback(handler):
> > Boost.Python.ArgumentError: Error when calling the metaclass bases
> >     Python argument types in
> >     python_client_handler.__init__(python_client_handler, str, tuple,
>  dict)
> > did not match C++ signature:
> >     __init__(_object*)
> >
> >
> > I am unsure what is happening here.  I cannot even find a __init__
>  function in my python_client_handler that has the said arguments?
>  __init__(python_client_handler, str, tuple, dict)
> >
> > Any ideas?
>
> Small complete example helps.
>
> you have to call __init__ method of exposed C++ class
>
>
> class callback(handler):
>     def __init__( self ):
>         handler.__init__( self )
>     def handle(self):
>         print 'handle python'
>
> HTH
>
> --
> Roman Yakovenko
> C++ Python language binding
> http://www.language-binding.net/
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
>
>
>
>
>
>
> ____________________________________________________________________________________
> Be a better friend, newshound, and
> know-it-all with Yahoo! Mobile.  Try it now.
> http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
>
>
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
>


-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/



More information about the Cplusplus-sig mailing list