我目前正面臨着一個非常惱人的問題好傢伙:函數指針鑄造
我正在寫使用函數指針的作品回調管理器的系統,現在考慮到現在爲止我已經分配的事實void函數指針指向一些其他非void函數指針,我已經意識到它實際上不允許它。
此刻我正在考慮投射void指針,以便匹配我爲我的原型函數每個回調,但我不明白如何執行鑄造。
它是可行的,還是我應該採用另一種解決方案?
目前這些都是我的回調容器及其類型定義:
typedef void modbus_read_t(unsigned int uid, unsigned int address, unsigned int count, char* response);
typedef void modbus_write_t(unsigned int uid, unsigned int address, unsigned int *data, char* response);
typedef void system_read_t(unsigned int uid, unsigned int var_number, unsigned int count, char* response);
typedef void system_write_t(unsigned int uid, unsigned int var_number, struttura_system *storage, char* response);
void (*M_callbacks_r[3]) (unsigned int uid, unsigned int address, unsigned int count, char* response);
void (*M_callbacks_w[2]) (unsigned int uid, unsigned int address, unsigned int *data, char* response);
void (*P_callbacks_r[2]) (unsigned int uid, unsigned int var_number, unsigned int count, char* response);
void (*P_callbacks_w[2]) (unsigned int uid, unsigned int var_number, struttura_system *storage, char* response);
這是功能的,其登記回調原型:
void registerCallback(int systemType,int operationType, void (callback)(void*));
了什麼做的是投void (callback)(void*)
到上面的typedefs之一。
請注意,使用空的參數列表,如在接受答案,是一個過時的功能,這意味着它可能會在將來的語言被刪除。過時的功能不應該使用,並留在用於向後兼容的語言中。 – 2501