如果我试图定义一个指针,重载函数过载的指针重载函数
void myprint(int);
void myprint(const char*);
void (*funpointer)(int) = myprint;
编译器明白funpointer
应指向版本的myprint
匹配它的参数。相反,我想funpointer
也被重载。
我试着简单地添加几行像
void myprint(int);
void myprint(const char*);
void (*funpointer)(int);
void (*funpointer)(const char *);
void funpointer = myprint;
但随后编译器为funpointer
(显然)冲突的声明的抱怨。
有没有办法实现我在找的东西?我希望指针表现为重载函数。所以我可以将它称为funpointer(1)
或funpointer("Hey.")
,它可以作为myprint
的相应版本。
如果main上面的decs在lib.h中,后面的代码可以做到以下几点: struct MYSTRUCT {double d; int x} void foo(MYSTRUCT m){printf(“mystruct \ n”); } ... MYSTRUCT ms = {3。14159,6}; foo(ms); foo(ms); 和lib会调用你的foo。 注意,使用这种技术,你必须非常小心隐式类型转换 – kylben
抱歉,应该是callfoo(ms),那么lib会回调你的foo(MYSTRUCT ms); – kylben
我这样做的原因是'funpointer'在运行时在几个函数之间交替。这些函数被重载以接受整数和字符,这就是我遇到的问题。我宁愿不将这些重载函数分解为常规函数(因为这需要在其他地方更改大量代码),但我认为我必须遵循这一点。 – Malabarba