|
Boost Users : |
Subject: Re: [Boost-users] Compile error OSX Callback problem for
From: Marshall Clow (marshall_at_[hidden])
Date: 2009-01-04 12:57:46
Bill McLean wrote:
>Marshall,
>
>Thanks for the reply. You have touched upon an issue that I'm not sure how
>to solve.
>
>The general problem is how to use boost::function and boost::bind to
>register a member callback function for a c style library.
>
>A proxy function that has signature of the c callback function and the
>correct instance of the class containing the member function to call.
>
>Any thoughts or approaches to solve it.
I don't think it's possible to do so in a type-safe manner.
The problem is that deep inside the (Mac OS X) file system, there's
some code that looks like this:
push <param1>
push <param2>
...
push <param6>
jsr (callback fn)
And that just won't work with boost::function or boost::bind expressions.
You can do it using a "trampoline function", but again, w/o type safety:
// psuedo code
void FSEventStreamTrampoline ( < params > ) {
boost::function< void ( <param types ) > cb = clientCallBackInfo;
return cb ( params );
}
.....
callBack = boost::bind(&fsmon :: osx::detail::FSEventTriggered,
this, _1, _2, _3, _4, _5, _6);
streamRef = FSEventStreamCreate(NULL,
FSEventStreamTrampoline,
&callBack,
pathsToWatch,
kFSEventStreamEventIdSinceNow,
LATENCY,
kFSEventStreamCreateFlagNone
);
and you have to package up the information that you previously passed
as "callbackInfo".
This may not work anyway, since I'm mixing boost::function and
boost::bind here - but you get the idea.
-- -- Marshall Marshall Clow Idio Software <mailto:marshall_at_[hidden]> It is by caffeine alone I set my mind in motion. It is by the beans of Java that thoughts acquire speed, the hands acquire shaking, the shaking becomes a warning. It is by caffeine alone I set my mind in motion.
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