2011-07-26 55 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