Hi Roman

The problem is that: How export this class?

namespace geometry{

class point_t
{
public:
    point_t() {};

protected:
    virtual bool ret_bool() { return false; }
};

class point_2 : public point_t
{
public:
    point_2() {};
};
}

I put attached the Py++ genereted code and a small test.
My  question is, how export this protected virtual function? the way
used in Py++ not work in this case.

Thanks

On Mon, Mar 23, 2009 at 5:57 AM, Roman Yakovenko
<roman.yakove...@gmail.com> wrote:
> 2009/3/19 Renato Araujo <rena...@gmail.com>:
>> Hi guys, I'm working again in my bindings generation and I get a new
>> question about virtual functions.
>>
>> I would like to know how export protected virtual functions with
>> default implementation, because I didn't find any documentation about
>> this and the code generated by Py++ not work in all cases.
>>
>> I have attached the test case on this e-mail, if someone would like to
>> try my implementation.
>
> Do you mind to be more specific?
>
> Can you show the original source code, the generated one and the
> "right\desired" one?
>
> Thanks
>
> --
> Roman Yakovenko
> C++ Python language binding
> http://www.language-binding.net/
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig@python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>



-- 
Renato Araujo Oliveira Filho
// This file has been generated by Py++.

#include "boost/python.hpp"

#include "properties.hpp"

namespace bp = boost::python;

struct point_t_wrapper : geometry::point_t, bp::wrapper< geometry::point_t > {

    point_t_wrapper(geometry::point_t const & arg )
    : geometry::point_t( arg )
      , bp::wrapper< geometry::point_t >(){
        // copy constructor
        
    }

    point_t_wrapper( )
    : geometry::point_t( )
      , bp::wrapper< geometry::point_t >(){
        // null constructor
    
    }

    virtual bool ret_bool(  ){
        if( bp::override func_ret_bool = this->get_override( "ret_bool" ) )
            return func_ret_bool(  );
        else
            return this->geometry::point_t::ret_bool(  );
    }

};

struct point_2_wrapper : geometry::point_2, bp::wrapper< geometry::point_2 > {

    point_2_wrapper( )
    : geometry::point_2( )
      , bp::wrapper< geometry::point_2 >(){
        // null constructor
    
    }

    virtual bool ret_bool(  ){
        if( bp::override func_ret_bool = this->get_override( "ret_bool" ) )
            return func_ret_bool(  );
        else
            return this->geometry::point_t::ret_bool(  );
    }

};

BOOST_PYTHON_MODULE(properties){
    bp::class_< point_t_wrapper >( "point_t", bp::init< >() )    
        .def( 
            "ret_bool"
            , (bool ( point_t_wrapper::* )(  ) )(&point_t_wrapper::ret_bool) );

    bp::class_< point_2_wrapper, bp::bases< geometry::point_t >, boost::noncopyable >( "point_2", bp::init< >() )    
        .def( 
            "ret_bool"
            , (bool ( point_2_wrapper::* )(  ) )(&point_2_wrapper::ret_bool) );
}
from properties import *

class test(point_t):
    def __init__(self):
        point_t.__init__(self)
        print "test.__init__"

    def ret_bool(self):
        ret = point_t.ret_bool(self)
        print "test.ret_bool", ret


t = test()
print t.ret_bool()
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to