[C++-sig] Python Exported Method that Takes a Boost::Function Object
Charles Solar
charlessolar at gmail.com
Mon Feb 1 16:22:09 CET 2010
I have a method that takes a boost function object as so
bool createTimer( boost::int64_t interval, boost::function< bool() >
function, bool recurring = false )
that I would like to call in python. I tried exporting the class in Py++
but it did not look like it does anything special with that argument.
However, when I try to use this from python I get
Boost.Python.ArgumentError: Python argument types in
createTimer( int, method, bool )
did not match C++ signature:
createTimer( unsigned long interval, class boost::function<bool
__cdecl(void)> function, bool recurring=False)
that is with the export code
.def( "createTimer", &Class::createTimer, ( bp::arg( "interval" ), bp::arg(
"function" ), bp::arg( "recurring" ) = false ) )
Py++ recommends exporting it like
{ //::Class::createTimer
typedef ::boost::int32_t ( ::Class::*createTimer_function_type
)( ::boost::uint32_t,::boost::function< bool ()() >,bool ) ;
Class_exposer.def(
"createTimer"
, createTimer_function_type( &::Class::createTimer )
, ( bp::arg("interval"), bp::arg("function"),
bp::arg("recurring")=(bool)(false) ) );
}
which btw there is an error here in Py++, ::boost::function< bool ()() >
should be ::boost::function< bool () >
that code also fails in python with the same error.
I have seen the page here
http://wiki.python.org/moin/boost.python/HowTo#boost.functionobjects about
boost function objects but I do not think that is exactly what I am looking
for.
If there an easy way to get python to work with this function definition?
Or am I trying to do something stupid?
with this code I can do createTimer( 3, boost::bind( &longFunc, arg1, arg2 )
) which is extremely convenient. I would like to have the same ability in
python.
Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20100201/e4298912/attachment.htm>
More information about the Cplusplus-sig
mailing list