The GCCXML/Reflex scheme suggested in a another answer essentially proposes that you run a step to preprocess your code, and extract information about the set of classes/functions/fields you have, so that you can programmatically access them. And given your stated that, that sounds like the right direction.
The Reflex scheme appears (I don't know anything about except what is posted in the other answer) to make this extra infromation available at runtime via a library that looks like dynamic reflection provided by other reflectable-languages, at the price of bloating the application with all this reflection data that you mostly don't use (the excuse for C++ was, "don't pay for what you don't use"). The point is you still have to write these psuedo-reflection calls to achieve your purpose, so you must know in advance to a great degree what you actually want to do.
You don't have to do it that way. If you have to preprocess the source code, you can get a preprocessor to extract the descriptive information (sort of like GCCXML), and simply generate calls on the targeted functions. The resulting program will do what the "reflection" one would do, but there's no runtime reflection library or bloat.
You can do this in theory with any program transformation. IN practice, such a tool must be able to process C++ and that's extremely hard.
There's only three tools on earth that can do this: our DMS Software Reengineering Toolkit with its C++ front end, Clang and (distant third) GCC.
All provide parsing of code, building ASTs and symbol tables (this is the reflection data you want), including all the microscopic details such as "number of arguments" (which appears to be a shortcoming of the Reflect scheme based on a comment in the other answer).
GCC can't regenerate valid C++ code although there is some extension called GCCMelt which makes some claim about this, that I have no experience with. (GCCXML is a custom hack of GCC to dump the symbol table data). Clang does provide the ability to modify C++ ASTs, but you have to hack at the trees through a procedural interface, which makes writing the transformations hard. DMS provides source-to-source surface syntax transformation capability, making it easier to write transformations. (YMMV).
The point is that by using such tools, you can write custom code to walk the symbol table to extract the function definitions etc. you want, and generate C++ code that does what you want (variable length argument lists and all). [This may be more complicated than you expect, but that's not different than the online reflection solution you already know about). No runtime reflection needed.
Don't expect any of these solutions to be easy to implement. C++ is a complicated language, and you'll pay the price for its complexity in whatever implementation scheme you choose, unless you are doing something really simple.