我正在使用c ++中的函数指针,我很奇怪是否有任何函数指针类型可以用于每个函数,不关心返回值,列表参数或多少参数。 如果有可能,它是如何工作的?
示例:
我有一些功能:
void F1(void);
void F2(int);
int F3(int,char *);
float F4(int,float);
int F5(MyClass);
...
如果: 我有
typedef(void)(* fp1)(void); 我可以打电话:fp1 x =& F1;
如果: 我有
typdef(float)(* fp2)(int,float); 我可以打电话:fp2 x =& F4;
现在我需要某种函数指针来存储所有这些函数。
类似的东西:
typedef void( function_pointer)(void )
或typedef void( function_pointer)(void ,...)//但两者都不起作用。
还有一个信息:我试图使用模板,但它没有解决我的问题 感谢。
答案 0 :(得分:2)
标准承诺您可以使用reinterpret_cast
将一个函数指针类型转换为另一个函数指针类型,并且此转换是可逆的。但是,它还要求您在使用之前将函数指针强制转换回其原始类型。
<强> [expr.reinterpret.cast] 强>
可以将指向函数的指针显式转换为指向不同类型函数的指针。 通过指向函数类型的指针调用函数的效果与函数定义中使用的类型不同。除了将“指向T1的指针”的rvalue转换为“指向T2的指针”类型(其中T1和T2是函数类型)并返回其原始类型产生原始指针值之外,这种指针转换的结果是未指定的
因此,您需要在其他地方跟踪您在变量中放入的函数类型,以便在使用它之前将其强制转换回正确的类型。因此,将函数类型相互转换的能力仅具有边际价值;你可以使用联盟来达到同样的效果。