我正在使用的一些遗留代码中有以下定义。
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
-ness。
所以我想我有几个问题:
- 有没有一种安全的方法可以确保
mVlanPriority
在旧代码中将其设置为 0 而无需更新旧代码? - 如果这不再是一种
POD
类型,该类的什么用途会中断?