C函数指针转换为另一个函数指针

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)

因为这两个函数原型是二进制兼容的?

Bat*_*eba 5

如果将函数指针强制转换为其他类型,则其调用的行为是未定义的.见C标准的附录J.2:

在以下情况下,行为未定义:指针用于调用类型与指向类型不兼容的函数(6.3.2.3).

兼容性在6.7.5.1第2段中处理:

要使两个指针类型兼容,两者都应具有相同的限定条件,并且两者都应是兼容类型的指针.

A MyPainter*与a不兼容void*.因此,您的函数指针强制转换不能用于调用该函数.