Is it possible to define something like this:
#define FOO(x, y) BAR()
#define FOO(x, sth, y) BAR(sth)
so that this:
FOO("daf", sfdas);
FOO("fdsfs", something, 5);
is translated to this:
BAR();
BAR(something);
?
Edit:
Actually, BAR
's are methods of my class. Sorry for not saying that before (didn't think it was relevant).
Answering DyP's question:
class Testy
{
public:
void TestFunction(std::string one, std::string two, std::string three)
{
std::cout << one << two << three;
}
void AnotherOne(std::string one)
{
std::cout << one;
}
void AnotherOne(void)
{
std::cout << "";
}
};
#define PP_NARG(...) PP_NARG_(__VA_ARGS__,PP_RSEQ_N())
#define PP_NARG_(...) PP_ARG_N(__VA_ARGS__)
#define PP_ARG_N(_1, _2, _3, N, ...) N
#define PP_RSEQ_N() 3, 2, 1, 0
// macro for exactly 2 arguments
#define FOO_2(_1, _2) AnotherOne()
// macro for exactly 3 arguments
#define FOO_3(_1, _2, _3) AnotherOne(_2)
// macro selection by number of arguments
#define FOO_(N) FOO_##N
#define FOO_EVAL(N) FOO_(N)
#define TestFunction(...) FOO_EVAL(PP_NARG(__VA_ARGS__))(__VA_ARGS__)
And call:
Testy testy;
testy.TestFunction("one", "two", "three"); // line 9
Compiler output:
Warning 1 warning C4003: not enough actual parameters for macro 'PP_ARG_N' main.cpp 9
Warning 2 warning C4003: not enough actual parameters for macro 'FOO_' main.cpp 9
Error 3 error C2039: 'FOO_' : is not a member of 'Testy' main.cpp 9
Edit ------------------------------------------------look here----------------------------------------------------------------->
(Overloading macro on number of arguments)
Preprocessor output:
Edit2: Seems like VS2010 has some issues with
__VA_ARGS__
and macro replacement.UPDATE: It's ... a bug?? (also see this SO question):
Preprocessor output:
For a workaround, see the linked SO question. I've updated the original answer (code) above and tested it with MSVC10 -> works now.