I have done a similar thing in the past, although it's not really a Boost
thing and not quite as general. What it did was let you register
functions with a tag and with arbitrary return types and arguments*. The
dispatcher would take a tag and the variant vector and see if the types
matched. If so, the registered function would be called otherwise the
request would be bonged. The basic concept is that when you register the
function, you create an adapter function that takes the vector of
variants, casts them to the specific types required by the function, then
calls the function. The adapter is what is stored in the table and
Boost.Function is handy for that.
* Limited in number by a compile time constant for the usual
reasons.
P.S. It also used a type system and encoding very similar to JSON (before
JSON existed) but I was told by my corporate masters that it was a silly
idea. Ah well.
At 10:56 AM 2/26/2009, you wrote:
Content-class:
urn:content-classes:message
Content-Type: multipart/alternative;
boundary="----_=_NextPart_001_01C99833.3D44D906"
Hello,
I've been trying to design a
function dispatch system and I was wondering if the following is possible
with the current boost libraries...
I currently parse json data into an
vector of variants, I would like to be able to take those variants and
invoke an arbitrary boost function object with a consistent return
type.
Is it possible to determine the
function argument types, get the typed value from the proper index in the
array of variants, and call the function with arguments?
This sounds like something the boost
fusion library might be able to do, but I can't find any example code
using the library to see if this is the right fit for the capabilities of
the library or if what I'm looking to do is not possible without tons of
boiler plate.
Any insight would be greatly
appreciated,