В некотором устаревшем коде, с которым я работаю, есть следующее определение.
struct VlanData
{
uint16_t mEtherType;
uint16_t mVlanId;
};
Я хочу добавить новый элемент в эту структуру:
struct VlanData
{
uint16_t mEtherType;
uint16_t mVlanId;
uint8_t mVlanPriority; // New member
};
Однако использование VlanData
было довольно непоследовательным в устаревшем коде.
Не инициализирован при построении:
VlanData myVlans;
myVlans.mEtherType = 0x8100;
myVlans.mVlanId = 100;
Значение инициализировано:
VlanData myVlans = { 0x8100, 100 };
Что я хочу сделать, так это придумать безопасный способ убедиться, что `mVlanPriority' автоматически устанавливается на 0 в устаревшем коде без обновления большого количества кода.
Я понимаю, что могу изменить устаревший код, чтобы инициализировать значения всех членов следующим образом:
VlanData myVlans = {};
Но я не хочу обновлять весь этот код. Я считаю, что создание конструктора по умолчанию, подобного этому, поможет:
VlanData()
: mEtherType(0),
mVlanId(0),
mVlanPriority(0)
{}
Но это также разрушило бы POD
-ность структуры.
Итак, я думаю, у меня есть несколько вопросов:
- Есть ли безопасный способ убедиться, что
mVlanPriority
установлен в 0 в устаревшем коде без обновления устаревшего кода? - Какое использование класса было бы нарушено, если бы он больше не был типом
POD
?