cut*_*CAT 2 c pointers function-pointers function
我需要函数指针的帮助.
我有两个函数指针类型:
typedef void (*draw_func1_t)(void* data, void* painter, double x, double y);
typedef void (*draw_func2_t)(void* data, MyPainter* painter, double x, double y);
Run Code Online (Sandbox Code Playgroud)
除第二个参数外,这两种类型几乎相同.现在我需要编写一个将draw_func1_t转换为draw_func2_t的函数:
draw_func2_t convert_func_p(draw_func1_t func) { ... }
Run Code Online (Sandbox Code Playgroud)
我怎么写呢?我可以强迫演员像
return (draw_func2_t)func;
Run Code Online (Sandbox Code Playgroud)
因为这两个函数原型是二进制兼容的?
如果将函数指针强制转换为其他类型,则其调用的行为是未定义的.见C标准的附录J.2:
在以下情况下,行为未定义:指针用于调用类型与指向类型不兼容的函数(6.3.2.3).
兼容性在6.7.5.1第2段中处理:
要使两个指针类型兼容,两者都应具有相同的限定条件,并且两者都应是兼容类型的指针.
A MyPainter*与a不兼容void*.因此,您的函数指针强制转换不能用于调用该函数.