On 1/22/2013 4:34 AM,
boost-users-request-at-lists.boost.org |Boost/Allow to home|
wrote:
And if you still wish to write such a lib(s) take a look at this article:
http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
Coincedentely, that article references my project that I cited on
another thread (shared pointers):
For Microsoft's (and Intel's) ugly,
non-standard 12 byte virtual_inheritance
pointers,
yet another trick is used, based on an idea invented by John
Dlugosz.
To pass bound member functions to legacy code (including OS API)
that expects a genuine function pointer, I generated a thunk at
run-time and used a compiler trick to get the information I needed
regarding the 'this' adjustment. It is certainly the _fastest_
possible; but I did not elaborate on a full "bind" feature like
Boost (and std) eventually came up with. In fact, I simplified my
own code so that all the arguments to pass were just members of one
structure, so I only worried about the case of binding to a member
function with one argument. It didn't automatically capture
smart-pointer objects for the binding, but I handled that separately
since it was already being done for "windows" owned by the OS's
reference to raw pointers; I had my own fake +1 count as part of the
object, and Window objects were my primary interest.
As I recall, the C++11 lambda spec provides for a primitive C
function pointer to be coughed up, but I've not yet used a compiler
that can do that.