В некотором устаревшем коде, с которым я работаю, существует следующее определение.
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
?