[C++-sig] Can't use make_function to wrap base class method?
Alex Mohr
amohr at pixar.com
Tue Dec 13 20:37:25 CET 2005
Seems I can't wrap a base class method of a derived class if I use
make_function. Is this expected? Here's an example.
#include <boost/python.hpp>
using namespace boost::python;
class Base {
public:
int method() { return 1; }
};
class Derived : public Base {};
BOOST_PYTHON_MODULE(Foo) {
class_<Derived>("Derived", "", init<>())
.def("method", make_function(&Derived::method))
.def("method2", &Derived::method)
;
}
>>> from Foo import *
>>> Derived().method()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
Boost.Python.ArgumentError: Python argument types in
Derived.method(Derived)
did not match C++ signature:
method(Base {lvalue})
>>> Derived().method2()
1
Seems like this should work. Wrapping a method in make_function seems
to make it not. This becomes cumbersome since the only way I know of to
supply return_value_policies in .add_property is to use make_function.
Thanks,
Alex
More information about the Cplusplus-sig
mailing list