Я занимаюсь разработкой на C, и мне нужно спросить информацию об использовании обратного вызова.
Предположим, я определил 3 обратных вызова с 3 различными типами ввода для обратного вызова, пример:
typedef void (*CB_1) (const struct paramType_1 *p);
typedef void (*CB_2) (const struct paramType_2 *p);
typedef void (*CB_3) (const struct paramType_3 *p);
Хорошо, у меня есть 3 массива обратных вызовов, каждый для типа обратного вызова:
static CB_1 CB1List[10] ;
static CB_2 CB2List[10] ;
static CB_3 CB3List[10] ;
Итак, я определил 3 списка обратных вызовов для вызова (в разных ситуациях), и каждый список имеет определенный тип обратного вызова (CB_1, CB_2 или CB_3), который имеет определенный параметр обратного вызова (paramType_1, paramType_2 или paramType_3).
Предположим теперь, что мне нужно выполнить операцию, которая является ИДЕНТИЧНОЙ для каждого обратного вызова ... Я должен скопировать вставить 3 раза функцию из-за различных конкретных параметров ... предположим, например, что мне нужно добавить обратный вызов в массив мне нужно это;:
static void CBAdd_1(CB_1 _cb) {
CB1List[i] = _cb
}
static void CBAdd_2(CB_2 _cb) {
CB2List[i] = _cb
}
static void CBAdd_3(CB_3 _cb) {
CB3List[i] = _cb
}
Как правильно использовать универсальную функцию "void CBAdd", чтобы не повторять трижды функцию для трех обратных вызовов? возможно, используя (void *) параметры или другие?
спасибо