#c #arduino
Вопрос:
Я работаю над Arduino и пишу универсальный класс cpp для взаимодействия в i2c. Я хотел бы знать, можно ли передать универсальный typedef struct
код, представляющий регистр в функции, что-то вроде этого
typedef struct {
uint8_t not_used_01 : 1;
uint8_t i3c_disable : 1;
uint8_t den_lh : 2;
//some other attributs
} reg_ctrl9_xl_t;
typedef struct {
uint8_t not_used_01 : 1;
uint8_t odr_h : 1;
uint8_t ord_lh : 1;
//some other attributs
} reg_ctrl5_g_t;
мой файл заголовка
class I2c
{
public:
I2c(uint8_t address);
void writeStruct(uint8_t register_addr, <what data type here??> register_struct);
//some other functions
private:
uint8_t _address;
}
Я не знаю, возможно ли это, я не знаю, какой тип данных я должен указать шрифтом register_struct
, потому что здесь у меня, например, 2 регистра reg_ctrl9_xl_t
, и reg_ctrl5_g_t
я ищу функцию общих параметров для writeStruct
Комментарии:
1. Если вы создадите класс
reg_ctrl
с общедоступным чисто виртуальным методомwriteTo(uint8_t register_addr)
, то классыreg_ctrl9_xl
иreg_ctrl5_g
, например, могут наследоватьreg_ctrl
и реализовывать метод. Когда вы захотите сохранить такой подкласс, он сможет иметь типreg_ctrl
.2. Хорошо, я буду искать виртуальный метод, я новичок в C 🙂
3. шаблон может быть альтернативой, но, похоже, вам нужен специальный код для каждого из них, поэтому перегрузка кажется более подходящей.
4. Я искал шаблон, но это то, что я понял. Если я использую шаблон, мне нужно создать одну функцию для каждого регистра typedef, правильно ли это ?
5. шаблон избегайте ручного копирования и вставки «одного и того же» кода (разрешение перегрузки может отличаться, но маркеры идентичны) для разных параметров, но действительно существует одна функция по типу параметра. Здесь у ваших участников разные имена, поэтому я полагаю, что у вас не может быть одного и того же кода. перегрузка кажется более подходящей.