Orxonox
0.0.5 Codename: Arcturus
|
Declaration of the ORXONOX_VA_NARGS macro which returns the number of arguments passed to a variadic macro. More...
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/facilities/expand.hpp>
Go to the source code of this file.
Macros | |
#define | ORXONOX_VA_NARGS(...) ORXONOX_VA_NARGS_CONCAT(__VA_ARGS__, ORXONOX_VA_NARGS_NUMBERS) |
Returns the number of arguments passed to a variadic macro. More... | |
#define | ORXONOX_VA_NARGS_CONCAT(...) BOOST_PP_EXPAND(ORXONOX_VA_NARGS_INTERN(__VA_ARGS__)) |
#define | ORXONOX_VA_NARGS_INTERN(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24, arg25, arg26, arg27, arg28, arg29, arg30, arg31, arg32, arg33, arg34, arg35, arg36, arg37, arg38, arg39, arg40, arg41, arg42, arg43, arg44, arg45, arg46, arg47, arg48, arg49, arg50, arg51, arg52, arg53, arg54, arg55, arg56, arg57, arg58, arg59, arg60, arg61, arg62, arg63, argn, ...) argn |
#define | ORXONOX_VA_NARGS_NUMBERS |
Declaration of the ORXONOX_VA_NARGS macro which returns the number of arguments passed to a variadic macro.
With this utility you can overload a macro for different numbers of arguments (of course overloading is not possible for different types, as macros are not type aware, but for different numbers of arguments is still very powerful).
Important: The macro can not be overloaded for 0 arguments: ORXONOX_VA_NARGS() returns 1!
Example: A macro to call functions
Note that the first (variadic) macro concatenates the name "CallFunction" with the number of arguments ("1" - "N"). Then all arguments are passed to the right macro.
#define ORXONOX_VA_NARGS | ( | ... | ) | ORXONOX_VA_NARGS_CONCAT(__VA_ARGS__, ORXONOX_VA_NARGS_NUMBERS) |
Returns the number of arguments passed to a variadic macro.
Important: The number of arguments must be greater than zero (ORXONOX_VA_NARGS() returns 1).
#define ORXONOX_VA_NARGS_CONCAT | ( | ... | ) | BOOST_PP_EXPAND(ORXONOX_VA_NARGS_INTERN(__VA_ARGS__)) |
#define ORXONOX_VA_NARGS_INTERN | ( | arg1, | |
arg2, | |||
arg3, | |||
arg4, | |||
arg5, | |||
arg6, | |||
arg7, | |||
arg8, | |||
arg9, | |||
arg10, | |||
arg11, | |||
arg12, | |||
arg13, | |||
arg14, | |||
arg15, | |||
arg16, | |||
arg17, | |||
arg18, | |||
arg19, | |||
arg20, | |||
arg21, | |||
arg22, | |||
arg23, | |||
arg24, | |||
arg25, | |||
arg26, | |||
arg27, | |||
arg28, | |||
arg29, | |||
arg30, | |||
arg31, | |||
arg32, | |||
arg33, | |||
arg34, | |||
arg35, | |||
arg36, | |||
arg37, | |||
arg38, | |||
arg39, | |||
arg40, | |||
arg41, | |||
arg42, | |||
arg43, | |||
arg44, | |||
arg45, | |||
arg46, | |||
arg47, | |||
arg48, | |||
arg49, | |||
arg50, | |||
arg51, | |||
arg52, | |||
arg53, | |||
arg54, | |||
arg55, | |||
arg56, | |||
arg57, | |||
arg58, | |||
arg59, | |||
arg60, | |||
arg61, | |||
arg62, | |||
arg63, | |||
argn, | |||
... | |||
) | argn |
#define ORXONOX_VA_NARGS_NUMBERS |