C ++ передает структуру функции для доступа к вложенной структуре - PullRequest
1 голос
/ 08 января 2020

У меня есть некоторые данные, организованные в виде вложенных структур, и я пытаюсь получить к ним доступ. Есть 4 слоя, а затем окончательная структура всегда имеет 2 переменные; val и addr:

struct Flash{
  struct Settings{
    struct UnderVoltage{
      struct Threshold{
        int16_t val = 2850;
        uint16_t addr = 0x4481;
      } Threshold;
      struct Delay{
        uint8_t val = 2;
        uint16_t addr = 0x4483;
      } Delay;
      struct Recovery{
        int16_t val = 2900;
        uint16_t addr = 0x4484;
      } Recovery;
    } UnderVoltage;
  } Settings;
} Flash;

Я хочу иметь возможность иметь функцию, аналогичную

void writeThreshold(){

  writeFlash( Flash.Settings.UnderVoltage.Threshold );

}

, которая затем вызывает функцию типа


void writeFlash( struct dataParam ){

  byte addr1 = dataParam.addr & 0xFF;
  byte addr2 = ( dataParam.addr >> 8 ) & 0xFF;

  uint8_t byteLen = sizeof( dataParam.val );
  byte valBytes[ byteLen ];
  for( int i = 0; i < byteLen; i++ ){
    valBytes[ i ] = dataParam.val >> ( i * 8 );
  }

}

Так есть ли способ отправить структурное вложение в функцию, чтобы функция могла обращаться к переменным внутри нее?

Спасибо

1 Ответ

4 голосов
/ 08 января 2020

Вы можете использовать шаблон функции:

template<typename T>
void writeFlash(const T& dataParam){
// ... as before
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...