我认为这样的事情会为你工作。您需要单独的宏来返回值与否,以及每个可能的参数数量。
// pt<x>: Parameter type <x>
// pn<x>: Parameter name <x>
#define METHOD_PAIR1(name, pt1, pn1) \
void name(pt1 pn1); \
void name(void* ptr, pt1 pn1) { name(pn1); } \
void name(pt1 pn1)
#define METHOD_PAIR2(name, pt1, pn1, pt2, pn2) \
void name(pt1 pn1, pt2 pn2); \
void name(void* ptr, pt1 pn1, pt2 pn2) { name(pn1, pn2); } \
void name(pt1 pn1, pt2 pn2)
#define FUNCTION_PAIR1(ret, name, pt1, pn1) \
ret name(pt1 pn1); \
ret name(void* ptr, pt1 pn1) { return name(pn1); } \
ret name(pt1 pn1)
#define FUNCTION_PAIR2(ret, name, pt1, pn1, pt2, pn2) \
ret name(pt1 pn1, pt2 pn2); \
ret name(void* ptr, pt1 pn1, pt2 pn2) { return name(pn1, pn2); } \
ret name(pt1 pn1, pt2 pn2)
METHOD_PAIR1(Foo, int, a)
{
// Insert body of void Foo(int a) here.
}
FUNCTION_PAIR1(int, Foo2, int, a)
{
// Insert body of int Foo2(int a) here.
}