代码之家  ›  专栏  ›  技术社区  ›  Jayen

在序列化指向没有默认构造函数的类的指针时,重写save_construct_数据时出现问题

  •  3
  • Jayen  · 技术社区  · 14 年前

    我试着用这个例子 http://www.boost.org/doc/libs/1_42_0/libs/serialization/doc/serialization.html#constructors

    bs.cpp:10: error: ‘const int my_class::m_attribute’ is private
    

    但是,如果我作为朋友添加save_construct_data,就会得到一个歧义错误:

    /usr/include/boost/serialization/serialization.hpp:148: error: call of overloaded ‘save_construct_data(boost::archive::text_oarchive&, const my_class*&, const boost::serialization::version_type&)’ is ambiguous
    /usr/include/boost/serialization/serialization.hpp:83: note: candidates are: void boost::serialization::save_construct_data(Archive&, const T*, unsigned int) [with Archive = boost::archive::text_oarchive, T = my_class]
    bs.cpp:10: note:                 void boost::serialization::save_construct_data(Archive&, const my_class*, unsigned int) [with Archive = boost::archive::text_oarchive]
    bs.cpp:29: note:                 void boost::serialization::save_construct_data(Archive&, const my_class*, unsigned int) [with Archive = boost::archive::text_oarchive]
    

    我可以将函数定义移到friend声明中,但这太难看了。

    我下一步该怎么做?

    谢谢,

    2 回复  |  直到 14 年前
        1
  •  7
  •   Jayen    13 年前

    必须先声明save_construct_数据,然后才能对其进行友好化。在不同的名称空间中。这样地:

    namespace boost { namespace serialization {
    template<class Archive>
    inline void save_construct_data(Archive & ar, const my_class * t, const unsigned int file_version);
    }}
    

    class my_class;
    

    所以整件事看起来 http://pastebin.com/embed_iframe.php?i=aFyCpjyY

        2
  •  -1
  •   well_then    13 年前

    确保save_construct_data方法的声明范围与boost库调用方法的范围不同(boost::serialization)