У меня есть класс Component
, который должен взаимодействовать с кодом C.
//// Component.h file ////
class Component{
public:
uint8_t getdevice1Value();
void setdevice1Value(uint8_t value);
uint8_t getdevice2Value();
void setdevice2Value(uint8_t uint8_t);
private:
uint8_t device1Value;
uint8_t device2Value;
}
Объект класса будет создан, когда его соответствующий поток будет создан в каком-то файле Application.cpp
:
///////Some function where the Component is used//////
createThread(){
Component myComponent; // Scope within the thread
// Some actions
}
Теперь приходит мой код C, который происходит с быть ориентированным на события. В этих функциях я хотел бы связать свои методы класса:
//// device1_event.c file ////
void command_get_device_value()
{
// code
// assign variable = Component::getdevice1Value() function
// code
}
void command_set_device_value()
{
// code
// call Component::setdevice1Value(variable) passing some variable
// code
}
Подобно файлу device1_event. c, у меня есть еще одно устройство device2_event. c, где я хотел бы сопоставить вызовы функций с getdevice2Value
и setdevice2Value
.
Я посмотрел на вопросы Использование функции-члена класса C ++ (не может быть stati c) в качестве C функции обратного вызова или также Передайте функцию-член C ++ функции C , где struct
регистрирует контекст и указатели функций.
У меня есть ограничение в том случае, если я не могу динамически c распределение. Таким образом, я не могу использовать оператор new
.
Теперь у меня есть несколько вопросов относительно них:
- Применима ли концепция
callback
в моем случае? - Если первый вопрос - да, тогда:
- Как мне go рассказать о его реализации. Я немного запутался по этому поводу. Я имею в виду, что call-функции должны быть помещены в C -функции, а также мне нужно зарегистрировать их после создания экземпляра
Component
. Как я могу это сделать? - Как добавить функции обратного вызова в мои
C
файлы?
- В этом вопросе a
struct
был нанят. Где я могу объявить «структуру»? Я попытался объявить его в файле Component.h
и представил его как extern
в файле device1_event.c
. Но я получаю incomplete type
ошибку.