2014-11-24 54 views
1

我們使用內部序列化庫。它使用模板化函數將變量寫入流。有沒有辦法檢測一個原始參數是可變大小?

使用它時必須注意的一件事是確保您使用特定的長度類型。你用int32_t等沒問題,但是如果你傳遞一個'int',你可能會發現它被解壓到一個int大小不同的系統上。然後解包失敗。

如果有人嘗試使用非固定大小的變量,是否會導致編譯器錯誤?

+2

提供對所有非固定大小類型引發錯誤的特化。 – 2014-11-24 17:31:37

+0

P.S.如果你正在編寫二進制值,不要忘記字節順序。 – 2014-11-24 17:32:29

+3

@MarkRansom int32_t在Visual Studio中定義爲「typedef int int32_t;」。如果我爲'int'和'int32_t'創建重載,代碼將不會編譯。 – 2014-11-24 17:36:29

回答

7

如果有人試圖使用非固定大小的變量 是否有導致編譯器錯誤的方法?

號這是完全沒有意義的,因爲int32_t很可能被定義爲一個typedef到int(並且經常是)。即std::is_same<int, std::int32_t>::value == true。你無法區分它們。

序列化大小爲int並在您要反序列化的平臺上檢查它。也就是說,請檢查sizeof int與序列化數據的平臺上的值是否相同。

+2

是的,定義二進制協議,然後檢查代碼是否適合(取消)序列化。 – Deduplicator 2014-11-24 17:45:01

相關問題