我在第一次看到Boost.Serialization,並且我無法找到關於虛擬鑽石繼承結構序列化的明確評估(或指令)。Will Boost.Serialization會直接與虛擬鑽石繼承一起工作嗎?
考慮下面的類層次結構:
class A { int a; }
class B1 : public virtual A { int b1; }
class B2 : public virtual A { int b2; }
class B3 : public virtual A { int b3; }
class C12 : public virtual B1, public virtual B2 { int c12; }
class C13 : public virtual B1, public virtual B3 { int c13; }
class C23 : public virtual B2, public virtual B3 { int c23; }
class D123 : public virtual C12, public virtual C13, public virtual C23 { int d123; }
什麼是正確的(希望簡單)的方式中的所有使用Boost.Serialization這些類實現序列化?
注:有需要序列沒有指針或引用類成員。另外請注意:我很樂意使用dynamic_cast<>
來確保對此層次結構中任何類的任何指針或引用具有所需的派生類型:我只關心如何正確且乾淨地保證所有BASE類數據成員被正確序列化,並且反序列化,以及當前正在被序列化的類。
使用序列化可能會有點麻煩,因爲它是一個模板類,如果您使用的是虛擬方法:http://stackoverflow.com/questions/10490245/virtual-functions-and-template-clash –
@Ben我相信鏈接問題中的問題僅適用於* abstract *基類(即具有* pure *虛函數的基類),因爲這些類不能實例化,因此不可能實例化所需的'serialize()在這樣一個班級內的功能。我不相信虛擬函數會影響Boost.Serialization - 事實上,它只是數據和數據,它們是序列化的,所以我認爲虛擬函數的存在本質上與Boost.Serialization無關,除非是間接的,如鏈接中的示例所示。 –
@Ben下面的鏈接似乎呈現給使用Boost.Serialization與抽象基類一個很好的支持方式:http://stackoverflow.com/questions/1332602/how-to-serialize-derived-template-classes-with- boost-serialize –