【发布时间】:2017-09-15 09:36:55
【问题描述】:
我对 c 和 c++ 比较陌生。我的任务(更多的是练习)将给定的 c 模块更改为 c++。为此,我必须先了解c文件。
我有两个具体问题,但我想简要介绍一下该功能的部分内容。我尝试使用通用标识符。
c代码节选:
有一个 Broker 提供注册回调的功能。 Broker 将不同类型的回调保存在各自的数组中。
首先,他们声明了几个函数指针来指定回调:
typedef bool (*ReadRequestCallback_tpf) (param1 a, param2 b, param3 c);
typedef bool (*ReadResponseCallback_tpf) (param4 a, param5 b);
typedef bool (*WriteRequestCallback_tpf) (param6 a, param7 b, param8 c);
...
然后,他们为每种类型制作了数组来保存注册的回调:
ReadRequestCallback_tpf ReadRequest_apf [MaxReadRequest];
ReadResponseCallback_tpf ReadResponse_apf [MaxReadResponse];
WriteRequestCallback_tpf WriteRequest_apf [MaxWriteRequest];
提供注册新回调的函数:
void RegisterReadRequestCallback_v (ReadRequestCallback_tpf callback_pf){
AddCallback_v((void**)ReadRequest_apf, (void*) callback_pf);
}
void RegisterReadResponseCallback_v (ReadResponseCallback_tpf callback_pf){
AddCallback_v((void**)ReadResponse_apf, (void*) callback_pf);
}
void RegisterWriteRequestCallback_v (WriteRequestCallback_tpf callback_pf){
AddCallback_v((void**)WriteRequest_apf, (void*) callback_pf);
}
AddCallback_v的签名是这样的:
void AddCallback_v (void* Array_apv[], void* function_pf)
我的问题:
(void**) array_apf真的是void* array_apv? 因此,将“函数指针数组”转换为“void-pointer to void-pointer”等于“void-pointer to an array of void-pointer”? 既然它有效,它似乎是这样。但我真的不明白。当尝试将其(或部分)更改为 c++ 时,使用模板而不是强制转换为 (void*) 是否更好?
这是我在这里的第一个条目。我希望,我可以解释我的问题。如果有什么需要澄清的,请告诉我。
提前致以诚挚的问候和感谢
【问题讨论】:
-
C 和 C++ 不是同一种语言,您实际使用的是哪一种?
-
实际代码是用C写的。每段代码都是用C写的。以后应该用C++写。
-
你可以尝试使用 std::function 的向量来代替数组