2012-10-24 46 views
4

我有一種情況,我有一個C++類的對象,需要使用Linux管道跨進程邊界發送(進程1到進程2)。我在網上搜索瞭如何在C++中進行序列化。我發現boost,但它需要在班級中進行一些更改。在我的情況下,我無法改變班級。在C++中跨進程邊界發送對象的深層副本

該類有很多指針,並且嵌套繼續3級(類1具有類型2→類型2的指針1具有類型3→類型3的指針2具有類型類型的指針3 4 - > 4級)。有什麼辦法可以使用管道發送這個對象,這樣它可以在第二個過程中重新創建?

謝謝。

+2

「在我的情況下,我不能改變班級......」聲明?或者你甚至不能修改實現?僅使用類的公共方法提供通用序列化解決方案是不現實的。 –

+0

@BrianCain我不能改變類實現 – Jake

+1

這不正是爲什麼XML被髮明的理由?如果你不喜歡XML,那麼試試JSON? –

回答

2

您需要以某種方式序列化該類。究竟是你的選擇,但你可以在格式做到像JSON,或XML,或某種二進制格式的你決定。沒有在你的課堂上看到更多的細節,沒有什麼其他的補充。

另一種選擇可能是使用Shared memory段來存儲類,但配備了一個帶指針的數學,併發等併發症的問題。

1

您是否考慮過Memento pattern的應用?您可以創建一個或多個類來處理如何序列化對象的細節(文本或二進制文件)。

創建保存對象的類也知道如何從你在接下來的過程中選擇的序列化格式實例化的新對象。

1

你將不得不做某種序列化,因爲你不能通過管道或類似的東西進行復制構建。如果你不能改變類,那麼你唯一的選擇是編寫一個外部函數或類,它使用你的頂級類的公共API來獲取所有的片段並序列化這些數據。然後在另一端,你必須從流中重構它。