|
Boost Users : |
From: Nicholas Francis (nich_at_[hidden])
Date: 2003-02-26 21:07:09
A newbie question regarding boost::python.
I need to make a templatized function that returns a
boost::python::object containing a reference to an object I already
have. Basically:
template<class T>
object convertToPython (T &obj) {
return object (obj)
}
All classes I pass through T are already wrapped (they are also not
copy-constructible). I tried with the code found at python.orgs wiki:
template<class T> T& identity(T& x) { return x; }
template<class T> object get_object_reference (T& x) {
object f = make_function
(&identity<T>, return_value_policy<reference_existing_object());
return f(x);
}
this code gave me a compile error (on CW 8.3, Mac OS X). Apparently CW
is convinced that the &identity<T> maps to void.
I then tried to hardcode a type just to see if it worked at all:
InputManager &identity (InputManager &x) { return x; }
object get_object_reference (InputManager &x) {
object f = make_function (
&identity, return_value_policy<reference_existing_object());
return f(x);
}
This compiled, but gave me a typeerror at runtime: (No to_python
(by-value) converter found for c++ type: InputManager)
I've seccesfully wrapped functions like this:
InputManager &GetInputManager();
BOOST_PYTHON_MODULE (Engine) {
def ( "GetInputManager",
&GetInputManager,
return_value_policy<reference_existing_object()
);
}
So it should be able to work.
Any help would be greatly appreciated....
TIA,
Nicholas
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net