【发布时间】:2015-06-11 15:36:19
【问题描述】:
我需要函数指针方面的帮助。
我有两种函数指针类型:
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);
这两种类型几乎相同,除了第二个参数。现在我需要编写一个将 draw_func1_t 转换为 draw_func2_t 的函数:
draw_func2_t convert_func_p(draw_func1_t func) { ... }
我该怎么写?我可以强制像这样的演员吗
return (draw_func2_t)func;
因为这两个函数原型是二进制兼容的?
【问题讨论】:
-
您实际上想要完成什么?我从未见过需要在函数指针类型之间进行转换。这样做通常是不安全的。
-
您写了 我需要编写一个将
draw_func1_t转换为draw_func2_t的函数,但您的示例进行了相反的转换。实际需要什么? -
最便携的选项是只使用
draw_func1_t来实现这两个功能。你仍然可以合法地将MyPainter *传递给void *参数,只是不会得到你想要的类型检查。也许您可以在 MyPainter 结构中添加一个幻数并在运行时检查它。 -
@WernerHenze 他在询问是否将一个函数指针转换为另一个函数指针(大小相同)。我不确定您链接到该问题的目的是什么。
标签: c function pointers function-pointers