(Struct *) Инициализация с использованием значения атрибута name?
Я определил эту структуру:
typedef struct WHEATHER_STRUCT
{
unsigned char packetID[1];
unsigned char packetSize[2];
unsigned char subPacketID[1];
unsigned char subPacketOffset[2];
...
} wheather_struct;
Как я могу инициализировать эту структуру (используя конструктор или новый) доступ по имени атрибута? Например:
wheather_struct.packetID = 1;
в заключение
Я попробовал это решение, и оно работает для меня, но вы думаете, что это хороший выбор?
WHEATHER_STRUCT * wheather_struct = new WHEATHER_STRUCT();
*weather_struct->packetID = '1';
И для атрибута с плавающей точкой:
wheather_struct->floatAttribute= 111.111
2 ответа
В C++ вы можете использовать new
выделить и инициализировать:
wheather_struct *p = new wheather_struct();
Обратите внимание на круглые скобки в конце - это инициализация значения - заполняет члены встроенных типов 0.
А потом:
p->packetID[0] = 1;
Вы можете добавить инициализаторы {}
для ваших массивов, чтобы инициализировать их в нули, как это:
struct wheather_struct // no need for typedef in C++
{
unsigned char packetID[1]{};
unsigned char packetSize[2]{};
unsigned char subPacketID[1]{};
unsigned char subPacketOffset[2]{};
};
Тогда используйте new
динамически создать объект:
auto w = new weather_struct;
w->packetID[0] = 'A';
Не забудьте удалить его позже:
delete w;
Но (намного лучше) используйте умный указатель:
auto w = std::make_unique<weather_struct>(); // will delete itself
w->packetID[0] = 'A';
// no need to delete it
Или (даже лучше) просто используйте его как объект значения (не всегда возможно):
weather_struct w;
w.packetID[0] = 'A';