[C++-sig] How to export non virtual protected functions?
Roman Yakovenko
roman.yakovenko at gmail.com
Sun Sep 25 07:27:26 CEST 2005
Good morning. I have a question regardless exposing protected functions.
1. What is the right way to export do_it function ?
struct S1{
protected:
void do_it(){}
};
User should be able to derive in Python from S1 and to use do_it function.
This is the code that pyplusplus generates right now. Pyste doesn't
treat this use case too.
( So can't use it for solution ).
namespace bp = boost::python;
BOOST_PYTHON_MODULE(pyplusplus){
bp::class_< S1 >( "S1" );
bp::class_< S2, bp::bases< S1 > >( "S2" );
}
There are a few possible solutions, also all of them includes creating
wrapper class.
I created this wrapper for S1.
namespace bp = boost::python;
struct S1_wrapper : S1, bp::wrapper< S1 > {
void do_it( ){
if( bp::override do_it = this->get_override( "do_it" ) )
do_it( );
else
S1::do_it( );
}
void default_do_it( ){
S1::do_it( );
}
};
solution 1:
1. S1_wrapper::do_it should be deleted
2. bp::class_< S1 >( "S1" );
becomes
bp::class_< S1_wrapper >( "S1" )
.def( "do_it", &S1_wrapper::default_do_it );
solution 2:
To treat do_it as virtual function.
solution 3:
Your solution comes here.
Thanks for the help.
Roman Yakovenko
More information about the Cplusplus-sig
mailing list