2011-07-26 87 views
2

我試圖使用Boost的序列化序列化加速scoped_array但是編譯器(VS2008)是給我下面的錯誤信息:如何使用Boost序列化序列化Boost scoped_array?

error C2039: 'serialize' : is not a member of 'boost::scoped_array<T>' 

如何序列化一個scoped_array?我應該爲此包括一個Boost庫嗎?

回答

1

不要猜測。 scoped_ptrscoped_array用於跟蹤本地範圍內的指針。

scoped_ptr模板是針對簡單需求的簡單解決方案。它提供了一個基本的「資源獲取即初始化」工具,沒有共享所有權或所有權轉讓語義。它的名稱和語義強制(通過不可複製)表明其意圖僅在當前範圍內保留所有權。

將內容序列化後回讀似乎違背了課堂的意圖。

+0

謝謝你的信息博。不幸的是,我不負責確定應該使用哪種類型的變量,所以我別無選擇,只能對這些數據結構中包含的值進行序列化。我發佈了一個適用於我的解決方案。 – Tymek

0

序列化數組本身,而不是內存管理的包裝。

+0

太棒了。自那時起,我想出瞭如何做到這一點。 :) – Tymek

0

這裏是我最終使用的解決方案(對稱 - 適用於保存和加載):

void myClass::serialize(Archive & ar, const unsigned int file_version) 
{ 
    ar & myScopedArraySIZE; 

    // Only gets called during loading 
    if (Archive::is_loading::value) 
    { 
     myScopedArray.reset(new ColourPtr[myScopedArraySIZE]); 
    } 

    for (uint i = 0; i < myScopedArraySize; i++) 
    { 
     ar & myScopedArray[i]; 
    } 
} 
+0

不應該是 ar&BOOST_SERIALIZATION_NVP(myScopedArraySIZE); 和 ar&BOOST_SERIALIZATION_NVP(myScopedArray [i]); ? – PeterD