
Hi! I have been struggling again recently with Boost.Function and Python bindings, and in order to use this library transparently from the Python side, I need to extract the contained function/functor, but only the type information available is a std::type_info object (available now with the new target_type() member function in RC_1_34_0), so I can not simply use the member function target<>(). Thus, I need an extra function to get the "raw" pointer to the contained function/functor. I played with the Boost.Function source code a little bit to see how it could be done. We only need to patch the file boost/function/function_base.hpp. The patched file is available here: http://tinyurl.com/ypa8vt I also put a patch file (a diff with the original function_base.hpp in RC_1_34_0) and a test file. The idea is, of course, to expose in some way the internal functor member (a detail::function::function_buffer object). I chose to simply add two member functions: void (*func_ptr() const)(); const void* obj_ptr() const; The distinction is required because, as we know, pointers to function and regular pointers can not be cast to and from each other. func_ptr() returns 0 if the content is actually a functor, and similarly, obj_ptr() returns 0 if the content is actually a pointer to function. Thus at the same time, it provides a way to test if the content is a pointer to function or not. Is there any interest to add this functionality to Boost.Function? -- François Duranleau LIGUM, Université de Montréal