Raw member and constructor functions
Hello ! I would like to use raw member functions and a raw constructor. However I can only manage to have raw functions to work. The following code works : #include <boost/python.hpp> #include <boost/python/raw_function.hpp> using namespace boost::python; tuple raw(tuple args, dict kw) { return make_tuple(args, kw); } BOOST_PYTHON_MODULE(PythonTest) { def("raw", raw_function(raw)); } However this code does not compile with MSVC7.1 and results in "error C2064: term does not evaluate to a function taking 2 arguments" : #include <boost/python.hpp> #include <boost/python/raw_function.hpp> using namespace boost::python; class X { public: object memberraw(tuple args, dict kw) { return object(); } }; BOOST_PYTHON_MODULE(PythonTest) { class_<X>("X") .def("memberraw", raw_function(&X::memberraw)) ; } Anyone would have an idea of how to get this working ? Thanks in advance, Marc
"Studious Apprentice" <apprentice_99@hotmail.com> writes:
Hello !
I would like to use raw member functions and a raw constructor. However I can only manage to have raw functions to work.
The following code works :
#include <boost/python.hpp> #include <boost/python/raw_function.hpp> using namespace boost::python;
tuple raw(tuple args, dict kw) { return make_tuple(args, kw); }
BOOST_PYTHON_MODULE(PythonTest) { def("raw", raw_function(raw)); }
However this code does not compile with MSVC7.1 and results in "error C2064: term does not evaluate to a function taking 2 arguments" :
#include <boost/python.hpp> #include <boost/python/raw_function.hpp> using namespace boost::python;
class X { public: object memberraw(tuple args, dict kw) { return object(); } };
BOOST_PYTHON_MODULE(PythonTest) { class_<X>("X") .def("memberraw", raw_function(&X::memberraw)) ; }
As http://www.boost.org/libs/python/doc/v2/raw_function.html says, f(tuple(), dict()) must be well-formed where f is the argument to raw_function. That's clearly not the case here. This might work: tuple raw(tuple raw, dict kw) { extract<X&>(raw[0])().memberraw(raw.slice(1), kw); } BOOST_PYTHON_MODULE(PythonTest) { class_<X>("X") .def("memberraw", raw_function(raw)) ; } -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (2)
-
David Abrahams -
Studious Apprentice