Boost/Python: method overloading w/out default args
Using Boost/Python, how does one overload methods? For instance: struct Bar { void func( const std::string& s ); void func( int i ); }; BOOST_PYTHON_MODULE( Foo ) { class_<Bar>( "Bar" ) .def( "func", &Bar::func ) .def( ??? ) ; } The reference documentation discusses the BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS macro, but it only seems to apply to methods with default arguments. --bruce
Using Boost/Python, how does one overload methods? For instance:
struct Bar { void func( const std::string& s ); void func( int i ); };
BOOST_PYTHON_MODULE( Foo ) { class_<Bar>( "Bar" ) .def( "func", &Bar::func ) .def( ??? ) ; }
The reference documentation discusses the BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS macro, but it only seems to apply to methods with default arguments.
--bruce
I should have scanned the python c++ SIG first. Also now realize that python.boost questions are preferred on that list rather than here. For future newbie reference, solution to above appears to be: struct Bar { void func( const std::string& s ); void func( int i ); }; BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( Bar_func_overloads, Bar::func, 1, 1 ) BOOST_PYTHON_MODULE( Foo ) { class_<Bar>( "Bar" ) .def("func",(void(Bar::*)(const std::string&))0,Bar_func_overloads) .def("func",(void(Bar::*)(int))0,Bar_func_overloads) ; } --bruce
"Bruce Lowery
" wrote: Using Boost/Python, how does one overload methods? For instance:
struct Bar { void func( const std::string& s ); void func( int i ); };
BOOST_PYTHON_MODULE( Foo ) { class_<Bar>( "Bar" ) .def( "func", &Bar::func ) .def( ??? ) ; }
The reference documentation discusses the BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS macro, but it only seems to apply to methods with default arguments.
--bruce
I should have scanned the python c++ SIG first. Also now realize that python.boost questions are preferred on that list rather than here.
For future newbie reference, solution to above appears to be:
struct Bar { void func( const std::string& s ); void func( int i ); };
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( Bar_func_overloads, Bar::func, 1, 1 )
BOOST_PYTHON_MODULE( Foo ) { class_<Bar>( "Bar" ) .def("func",(void(Bar::*)(const std::string&))0,Bar_func_overloads) .def("func",(void(Bar::*)(int))0,Bar_func_overloads) ; }
This is not really a good use of
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS. You should leave it out and do
this instead:
BOOST_PYTHON_MODULE( Foo )
{
class_<Bar>( "Bar" )
.def("func"
, static_cast
participants (2)
-
Bruce Lowery <bruce_lowery@yahoo.com>
-
David Abrahams